에 대한 설명서를 읽는 동안 dict.copy()사전의 얕은 사본을 만듭니다. 내가 따르는 책 (Beazley 's Python Reference)도 마찬가지입니다.
m.copy () 메소드는 맵핑 오브젝트에 포함 된 항목의 얕은 사본을 작성하여 새 맵핑 오브젝트에 배치합니다.
이걸 고려하세요:
>>> original = dict(a=1, b=2)
>>> new = original.copy()
>>> new.update({'c': 3})
>>> original
{'a': 1, 'b': 2}
>>> new
{'a': 1, 'c': 3, 'b': 2}
그래서 나는 original얕은 사본을하고 있었기 때문에 이것이 값을 업데이트하고 'c': 3을 추가 한다고 가정했습니다 . 목록을 작성하는 것처럼 :
>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
이것은 예상대로 작동합니다.
둘 다 얕은 사본이므로 왜 dict.copy()예상대로 작동하지 않습니까? 아니면 얕은 대 깊은 복사에 대한 나의 이해가 잘못 되었습니까?
!['a = b'의 그림 : 'a'와 'b'는 모두 '{1 : L}'을, 'L'은 '[1, 2, 3]'을 가리 킵니다.](https://i.stack.imgur.com/4AQC6.png)
!['b = a.copy ()'그림 : 'a'는 '{1 : L}', 'b'는 '{1 : M}', 'L'및 'M'은 모두 '[ 1, 2, 3] '.](https://i.stack.imgur.com/Vtk4m.png)
!['b = copy.deepcopy (a)'의 그림 : 'a'는 '{1 : L}'을 가리키고 'L'은 '[1, 2, 3]'을 가리 킵니다.; 'b'는 '{1 : M}'을 가리키고 'M'은 '[1, 2, 3]'의 다른 인스턴스를 가리 킵니다.](https://i.stack.imgur.com/BO4qO.png)