Módulo Copy de Python
El módulo Copy es un conjunto de funciones relacionadas con la copia de diferentes elementos de una lista, objetos, arrays, etc. Se puede utilizar para crear copias superficiales (shallow copies) así como copias profundas (deep copies).
De la documentación de Python 3
Las sentencias de asignación en Python no copian objetos, crean enlaces entre un objetivo y un objeto. Para colecciones que son mutables o contienen elementos mutables, a veces se necesita una copia para poder cambiar una copia sin cambiar la otra. Este módulo proporciona operaciones genéricas de copia superficial (shallow) y profunda (deep).
Operaciones de copia superficial (Shallow copy operations)
Una copia superficial construye un nuevo objeto compuesto e inserta en él (en la medida de lo posible) referencias a los objetos encontrados en el original.
copy.copy(x) Devuelve una copia superficial de x.
import copy
a = [[1],[2],[3]]
# Crear copia superficial (las listas anidadas todavía se referencian)
b = copy.copy(a)
a
[[1], [2], [3]]
b
[[1], [2], [3]]
Sin importar el módulo copy no se puede usar
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'copy' is not defined
Operaciones de copia profunda (Deep copy operations)
Una copia profunda construye un nuevo objeto compuesto e inserta en él, recursivamente, copias de los objetos encontrados en el original.
copy.deepcopy(x[, memo]) Devuelve una copia profunda de x.
import copy
a = [[1],[2],[3]]
# Crear copia profunda (copia completamente independiente)
b = copy.deepcopy(a)
# Modificar el original
a[0][0] = 0
a[1] = None
a
[[0], None, [3]]
b
[[1], [2], [3]]