11. Copiar un Diccionario

Existen varias maneras de realizar copias de diccionarios. Suponiendo que dict1 y dict2 son diccionarios:

1. Una forma de copiar un diccionario es con la instrucción: 

 dict2 = dict1

Esta instrucción hace que dict2  sea una referencia a dict1 por lo que los cambios realizados en dict1 automáticamente también se harán para  dict2.

2. Otra forma de hacer una copia o referencia al mismo objeto es utilizando el método de diccionario incorporado copy().

 Hacer una copia de un diccionario con el método copy()

Figura 1

Figura 2


3. La tercer forma de hacer una copia es utilizando el método integrado dict().


 Hacer una copia de un diccionario utilizando dict().
Figura 3

1. ¿Si tengo dos diccionario llamado A y B, y escribo A=B, que pasa cuando elimino un valor de B.  ¿Se elimina en A?

2. ¿Cuántas maneras conoce para crear un diccionario B que contenga los mismos valores que otro A?

 Con el símbolo = el nuevo elemento es SOLO otro nombre para el mismo objeto, por lo tanto los cambios en uno se verán reflejados en el otro.

 Con el método .copy() se crea un diccionario nuevo, y modificar o eliminar uno no afecta al otro.

Versión 3.5 

Veamos el siguiente ejemplo:

La salida para este script será:

Podemos ver que para la Versión 3.5 el método copy crea un NUEVO OBJETO, línea 11, pero la asignación (=) en la línea 10, hace que sea el MISMO objeto Lista1 y Lista2 con distintos nombres. los cambios en uno se reflejan en el otro.

Versión 3.7 o superior.


La salida de este script es la siguiente...

Con esta salida podemos ver que:
Cuando los valores de un diccionario NO son listas, el metodo copy (Linea 4) funciona.
Cuando en los valores de un diccionario hay listas el método copy NO genera un nuevo objeto, así que los cambios en uno dic3, se reflejan en dic4. 

Copia Fresca 

Para tener un NUEVO OBJETO diccionario que NO sea una referencia con otro nombre se puede usar el método deepcopy de la librería copy.

Veamos un Ejemplo:

La salida de este scritp, sería:

Se puede observar en la salida del script, que los cambios en un diccionario x NO afectan al otro diccionario z, ya que con el método deepcopy de la librería copy se genera un nuevo objeto.

Una copia fresca del diccionario z al x se realiza en la línea 9, observe que esto es posible por que en la línea 1 se importó la librería copy!

Esto se aplica para Listas también, veamos un ejemplo:

La salida sería:

Si usamos la librería copy:

Se puede ver que ahora si hace lo esperado:

Todo esto NO sucede para datos sencillos:

La salida será:

Marcas: