Tentei o seguinte no interpretador python:
>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>
Aqui, após anexar o dicionário 'b' à lista 'a', estou alterando o valor correspondente à chave 1 no dicionário 'a'. De alguma forma, essa mudança também se reflete na lista. Quando acrescento um dicionário a uma lista, não estou apenas acrescentando o valor do dicionário? Parece que acrescentei um ponteiro ao dicionário à lista e, portanto, as alterações no dicionário estão sendo refletidas na lista também.
Não quero que a mudança seja refletida na lista. Como eu faço isso?
Obrigado pelo seu tempo!
python
list
dictionary
neo29
fonte
fonte
Respostas:
Você está correto ao dizer que sua lista contém uma referência ao dicionário original.
a.append(b.copy())
deve fazer o truque.Tenha em mente que esta é uma cópia superficial. Uma alternativa é usar
copy.deepcopy(b)
, o que faz uma cópia profunda.fonte
Também com dict
a = [] b = {1:'one'} a.append(dict(b)) print a b[1]='iuqsdgf' print a
resultado
[{1: 'one'}] [{1: 'one'}]
fonte
usar cópia e cópia profunda
fonte