잠깐만요
변경 불가능 객체는 함수 인자로 전달해 변경할 수 없을까?
객체 참조에 의한 전달 방식을 공부하고 나면 한 가지 의문이 생깁니다. 변경 불가능 객체는 함수 내부에서 바꿀 수 없으니 튜플을 변경 목적으로 함수 인자에 전달하는 것은 아무런 의미가 없는 걸까요?
파이썬 공식 문서를 보면 이 문제의 해결책을 몇 가지 제시해 놓았습니다. 그중 가장 추천하는 방법을 소개하겠습니다.
코드 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 값도 변경됩니다. 실행 결과를 보면 잘 변경된 것을 알 수 있습니다.