¿Por qué la actualización de un objeto del diccionario afecta a otro?

Tengo un diccionario nested, llamémoslo diccionario d. La clave de este diccionario es un número entero, y el valor de cada clave es otro diccionario. Estoy intentando un código simple en Python 2.7 para actualizar el valor de una clave externa, pero parece que está actualizando los valores de TODAS las claves externas.

Espero que estos códigos lo hagan más fácil de entender. Aquí está mi entrada.

>>> template = {'mean':0,'median':0} >>> d[0] = template >>> d[1] = template >>> d[0]['mean'] = 1 >>> d 

y luego aquí está la salida:

 {0: {'mean':1, 'median':0}, 1:{'mean':1,'median':0}} 

usted ve, solo asigné ‘1’ a d [0] [‘mean’], pero de alguna manera también se actualiza el d [1] [‘mean’]. Si incremento el número de teclas en la d, solo cambiará TODOS los valores [‘mean’] en todas las teclas d.

¿Estoy haciendo algo mal aquí? ¿Es esto un error?

 >>> d[0] = template >>> d[1] = template 

Estas dos afirmaciones hechas tanto d[0] como d[1] refieren al mismo objeto, template . Ahora puede acceder al diccionario con tres nombres, template , d[0] d[1] . Así que haciendo:

 d[0]['mean'] = 1 

modifica un objeto de diccionario, que puede ser referido con los otros nombres mencionados anteriormente.

Para que esto funcione como esperaba, puede crear una copia del objeto de template , como este

 >>> d[0] = template.copy() >>> d[1] = template.copy() 

Ahora, d[0] d[1] refieren a dos objetos de diccionario diferentes.