반응형
파이썬 : 목록에 사전 추가-동작과 같은 포인터가 보입니다.
파이썬 인터프리터에서 다음을 시도했습니다.
>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>
여기서는 사전 'b'를 목록 'a'에 추가 한 후 사전 'a'의 키 1에 해당하는 값을 변경합니다. 어떻게 든이 변경 사항은 목록에도 반영됩니다. 목록에 사전을 추가 할 때 사전 값만 추가하지 않습니까? 목록에 사전에 대한 포인터를 추가 한 것처럼 보이므로 사전에 대한 변경 사항도 목록에 반영됩니다.
변경 사항이 목록에 반영되는 것을 원하지 않습니다. 어떻게하나요?
시간 내 주셔서 감사합니다!
목록 에 원래 사전에 대한 참조 가 포함되어 있다는 점에서 정확합니다 .
a.append(b.copy())
트릭을해야합니다.
이것은 얕은 사본을 만든다는 것을 명심하십시오. 대안은를 사용하는 것입니다.이 방법은 copy.deepcopy(b)
깊은 사본을 만듭니다.
또한 dict 와 함께
a = []
b = {1:'one'}
a.append(dict(b))
print a
b[1]='iuqsdgf'
print a
결과
[{1: 'one'}]
[{1: 'one'}]
복사 및 전체 복사 사용
ReferenceURL : https://stackoverflow.com/questions/5244810/python-appending-a-dictionary-to-a-list-i-see-a-pointer-like-behavior
반응형
'program story' 카테고리의 다른 글
SQL, 보조 숫자 테이블 (0) | 2020.12.15 |
---|---|
iframe에서 자바 스크립트 함수 호출 (0) | 2020.12.15 |
SQL Server에서 날짜 형식을 DD / MMM / YYYY 형식으로 변환 (0) | 2020.12.14 |
내 Mac에서 dex2jar을 사용할 수 없습니다 : 권한이 거부되었습니다. (0) | 2020.12.14 |
사용할 것, int 또는 Integer (0) | 2020.12.14 |