문제
파이썬에서 b = a (별칭), b = a[:] (얕은 복사), b = copy.deepcopy(a) (깊은 복사)의 차이로 옳은 것은? (단 a는 중첩 리스트)
① 세 방식 모두 안쪽 중첩 리스트까지 완전히 독립된 새 객체를 만든다. ② b = a는 새 바깥 리스트를 만들지만 안쪽은 공유한다. ③ b = a[:]는 바깥 리스트만 새로 만들고 안쪽 중첩 리스트는 a와 참조를 공유한다. ④ copy.deepcopy(a)는 바깥 리스트만 새로 만들고 안쪽은 공유한다.
정답
3번
해설
b = a는 같은 객체를 가리키는 별칭이라 바깥도 공유한다. b = a[:]는 얕은 복사로 바깥 리스트는 새 객체지만 안쪽 중첩 리스트는 참조를 공유한다. copy.deepcopy(a)만 안쪽까지 모두 새로 만들어 완전히 독립시킨다.