더북(TheBook)

3.7 얕은 복사 vs 깊은 복사

얕은 복사와 깊은 복사의 차이점은 파이썬에서 무척 중요한 주제다. 일단 얕은 복사부터 살펴보자. 다음 코드를 보면 b_lista_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]]
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.