Python: Cómo copiar un diccionario

Objetivo: aprender a copiar un diccionario en Python, evitando referencias al mismo objeto.

Al igual que las listas, los diccionarios, como sabes, tienen cosquillas (no son inmutables). Padecen el mismo problema que aquéllas a la hora de copiarlas: podemos obtener referencias al mismo objeto que, si no somos cuidadosos, pueden llevarnos a un buen quebradero de cabeza.

Observa el fenómeno:

>>> x = {'manzana':'verde', 'plátano':'amarillo'}
>>> y = x
>>> y
{'plátano': 'amarillo', 'manzana': 'verde'}

Aparentemente, aunque x e y tengan el mismo valor, se trataría de objetos distintos y cada uno podría vivir, desde este momento, su propia vida independiente. Al menos, eso es lo que esperaríamos en otros lenguajes de programación.

Pero no es así, uno de los grandes atractivos de Python: x e y no son más que dos collares en el mismo perro.

>>> y is x
True

De hecho, si modificamos x, los cambios también se reflejan en y:

>>> x['fresa'] = 'roja'
>>> y
{'fresa': 'roja', 'plátano': 'amarillo', 'manzana': 'verde'}

Entonces, ¿cuál es el modo correcto de obtener un duplicado independiente de un diccionario?

Los diccionarios tienen una inmesa colección de metodos que, poco a poco, conviene ir aprendiendo. Uno de ellos, copy(), soluciona nuestro problema:

>>> z = x.copy()
>>> z
{'fresa': 'roja', 'plátano': 'amarillo', 'manzana': 'verde'}

La variable z apunta a un duplicado de x, pero observa que ahora son objetos distintos:

>>> z is x
False

Si modificamos x podemos comprobar que z no se ve afectada:

>>> del x['plátano']
>>> x
{'fresa': 'roja', 'manzana': 'verde'}
>>> z
{'fresa': 'roja', 'plátano': 'amarillo', 'manzana': 'verde'}

Habríamos llegado al mismo resultado a través de la función dict(), empleada para construir diccionarios:

>>> z = dict(x)

Hablaremos de dict() con mucho más detalle más adelante. Quédate, hasta entonces, con estos dos modos de duplicar diccionarios.

Observa que la variable y, copia burda de x, se ha quedado sin su tan rico en potasio plátano.

>>> y
{'fresa': 'roja', 'manzana': 'verde'}

Se lo merece, ¡esto es Python!

Javier Montero Gabarró


Python: Cómo copiar un diccionario


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies