더북(TheBook)

icon_wait


변경 불가능 객체는 함수 인자로 전달해 변경할 수 없을까?

객체 참조에 의한 전달 방식을 공부하고 나면 한 가지 의문이 생깁니다. 변경 불가능 객체는 함수 내부에서 바꿀 수 없으니 튜플을 변경 목적으로 함수 인자에 전달하는 것은 아무런 의미가 없는 걸까요?

파이썬 공식 문서를 보면 이 문제의 해결책을 몇 가지 제시해 놓았습니다. 그중 가장 추천하는 방법을 소개하겠습니다.

코드 5-12 function/tu_change_in_func.py

def change_value(tu):
    tu = ('I am your father!', 2, 3, 4) #2
    return tu                           #3

if __name__ = = "__main__":
    tu = (1, 2, 3, 4)                   #1
    tu = change_value(tu)               #4
    print(tu)

실행결과 ('I am your father!', 2, 3, 4)


#1의 튜플을 #4에서 함수 인자로 전달합니다. #2를 보면 함수 안에서 새로운 튜플을 할당하고 change_value( ) 함수 안에 있는 지역 변수 tu가 이를 참조합니다. 여기까지만 보면 함수를 호출한 쪽의 튜플 tu 값은 변경되지 않습니다. 지금부터가 중요합니다. #3을 보면 change_value( ) 함수 안에서 변경한 지역 변수 tu를 반환하고 #4에서는 함수를 호출한 쪽의 tu에 반환값을 대입합니다. 이렇게 하면 함수 호출이 끝나더라도 함수 안에서 할당된 객체를 함수를 호출한 쪽의 tu가 참조하므로 사라지지 않고 tu 값도 변경됩니다. 실행 결과를 보면 잘 변경된 것을 알 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.