728x90
반응형
질문 : dict.copy () 이해-얕거나 깊습니까?
dict.copy()
대한 문서를 읽는 동안 사전의 얕은 사본을 만든다고합니다. 내가 따르는 책 (Beazley의 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 = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
반대로 전체 복사는 모든 내용을 값별로 복사합니다.
>>> import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})
그래서:
b = a
: 참조 할당,a
와b
가 동일한 객체를 가리 킵니다.b = a.copy()
: 얕은 복사,a
와b
는 두 개의 분리 된 객체가되지만 그 내용은 여전히 동일한 참조를 공유합니다.b = copy.deepcopy(a)
: 깊은 복사,a
와b
의 구조와 내용이 완전히 분리됩니다.
출처 : https://stackoverflow.com/questions/3975376/understanding-dict-copy-shallow-or-deep
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python에서 증감연산자를 사용하는 방법 (0) | 2021.08.30 |
---|---|
Python에서 C / C ++ 호출 (0) | 2021.08.30 |
파이썬에서 오늘 날짜를 YYYY-MM-DD 형태로 얻는 방법 (0) | 2021.08.30 |
Python에서 dictionary의 임의 요소 액세스 (0) | 2021.08.28 |
OrderedDict에 JSON을 로드 하는 방법 (0) | 2021.08.28 |