Intenté lo siguiente en el intérprete de Python:
>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>
Aquí, después de agregar el diccionario 'b' a la lista 'a', estoy cambiando el valor correspondiente a la clave 1 en el diccionario 'a'. De alguna manera, este cambio también se refleja en la lista. Cuando agrego un diccionario a una lista, ¿no estoy agregando simplemente el valor de dictionary? Parece que he agregado un puntero al diccionario a la lista y, por lo tanto, los cambios en el diccionario también se reflejan en la lista.
No quiero que el cambio se refleje en la lista. ¿Cómo lo hago?
¡Gracias por tu tiempo!
python
list
dictionary
neo29
fuente
fuente
Respuestas:
Tiene razón en que su lista contiene una referencia al diccionario original.
a.append(b.copy())
debería hacer el truco.Tenga en cuenta que esto hace una copia superficial. Una alternativa es usar
copy.deepcopy(b)
, lo que hace una copia profunda.fuente
También con dict
a = [] b = {1:'one'} a.append(dict(b)) print a b[1]='iuqsdgf' print a
resultado
[{1: 'one'}] [{1: 'one'}]
fuente
usar copia y copia profunda
fuente