파이썬 인터프리터에서 다음을 시도했습니다.
>>>
>>> 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'}]