이번에는 함수 안에서 리스트 li에 새로운 리스트를 통째로 할당하였습니다(#1). 그런데 실행 결과를 보면 이번에는 리스트가 변경되지 않았습니다. 대체 어떻게 된 일일까요?
코드 5-10과 코드 5-11을 보면 한 가지 차이점을 발견할 수 있습니다.
• 코드 5-10: 참조한 리스트에 접근해 변경을 시도
• 코드 5-11: 아예 다른 리스트를 메모리 공간에 새로 만든 다음 이를 참조해 리스트를 변경
두 예제 코드의 차이점을 그림으로 비교해 보겠습니다. 먼저 코드 5-10에서 #1을 실행한 다음의 모습입니다(그림 5-12).
그림 5-12 call_by_obj_ref2.py 스택 프레임
func 스택 프레임의 li와 main 스택 프레임의 li가 모두 같은 메모리 공간을 참조합니다.