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.

Deja una respuesta