3.7 얕은 복사 vs 깊은 복사
얕은 복사와 깊은 복사의 차이점은 파이썬에서 무척 중요한 주제다. 일단 얕은 복사부터 살펴보자. 다음 코드를 보면 b_list는 a_list의 복사본을 가지며, b_list 변경 사항이 a_list에 영향을 미치지 않을 것이라고 기대할 것이다.
a_list = [1, 2, [5, 10]]
b_list = a_list[:] # 항목 간(member-by-member) 복사
자, 인덱스를 사용하여 b_list 각 항목 값을 0으로 변경해 보자.
b_list[0] = 0
b_list[1] = 0
b_list[2][0] = 0
b_list[2][1] = 0
아마도 여러분은 b_list 값을 변경한 것이 a_list에는 반영되지 않을 것이라고 기대할 것이다. b_list는 별도의 컬렉션이기 때문이다. 하지만 a_list를 출력해 보면 다음과 같이 기대와는 다른 값이 출력된다.
>>> print(a_list)
[1, 2, [0, 0]]