Las funciones copy() y deepcopy() del módulo copy
Aunque pasar referencias es a menudo la forma más práctica de tratar con listas y diccionarios, si la función modifica la lista o el diccionario que se pasa, puede que no quieras que estos cambios aparezcan en el valor original de la lista o el diccionario. Para ello, Python ofrece un módulo llamado copy
que proporciona las funciones copy()
y deepcopy()
. La primera de ellas, copy.copy()
, se puede utilizar para hacer una copia duplicada de un valor mutable como una lista o un diccionario, no sólo una copia de una referencia. Introduzca lo siguiente en el shell interactivo:
>>> import copy
>>> spam = ['A', 'B', 'C', 'D']
>>> id(spam)
44684232
>>> cheese = copy.copy(spam)
>>> id(cheese) # cheese is a different list with different identity.
44685832
>>> cheese[1] = 42
>>> spam
['A', 'B', 'C', 'D']
>>> cheese
['A', 42, 'C', 'D']
Ahora las variables spam
y cheese
se refieren a listas separadas, por lo que sólo se modifica la lista de cheese
al asignar 42
en el índice 1
. Como puedes ver en la imagen, los números de identificación de referencia ya no son los mismos para ambas variables porque las variables se refieren a listas independientes.

cheese = copy.copy(spam)
crea una segunda lista que puede ser modificada independientemente de la primera.Si la lista que necesitas copiar contiene listas, utiliza la función copy.deepcopy()
en lugar de copy.copy()
. La función deepcopy()
copiará también estas listas internas.