[python] python : 목록에 사전 추가-동작과 같은 포인터가 보입니다.

파이썬 인터프리터에서 다음을 시도했습니다.

>>>
>>> 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'}]


답변

복사 및 전체 복사 사용

http://docs.python.org/library/copy.html


답변