3.2 리스트 복사 vs 리스트 변수 복사
파이썬의 변수는 C++의 ‘값’보다는 ‘참조’에 가깝다. 한 컬렉션을 제대로 복사하려면 추가 작업이 필요하다는 의미다. 다음 코드는 어떻게 동작할까?
a_list = [2, 5, 10]
b_list = a_list
첫 번째 줄에서 대입 연산자(=)의 우측에 있는 값으로 리스트가 생성되었다. 하지만 두 번째 줄에서는 새로운 데이터가 생성되지 않았다. 그저 다음과 같이 동작했을 뿐이다.
‘a_list’가 참조하고 있는 객체를 위한 별칭 ‘b_list’를 만들어라.
변수 b_list는 a_list가 참조하고 있는 객체에 접근할 수 있는 또 다른 별칭이 되며, 둘 중 한 변수의 값을 변경하면 다른 하나도 함께 변경된다.2
b_list.append(100)
a_list.append(200)
b_list.append(1)
print(a_list) # [2, 5, 10, 100, 200, 1] 출력
2 역주 변수는 2개이지만, 결국 하나의 객체를 참조하고 있기 때문에 어떤 변수 값을 변경하더라도 동일한 객체를 수정하게 된다는 의미다.