Módulo Copy do Python
O Módulo Copy é um conjunto de funções relacionadas à cópia de diferentes elementos de uma lista, objetos, arrays, etc. Pode ser usado para criar cópias rasas (shallow copies) bem como cópias profundas (deep copies).
Da documentação do Python 3 documentação
As instruções de atribuição em Python não copiam objetos, elas criam ligações entre um alvo e um objeto. Para coleções que são mutáveis ou contêm itens mutáveis, uma cópia é às vezes necessária para que se possa alterar uma cópia sem alterar a outra. Este módulo fornece operações genéricas de cópia rasa (shallow) e profunda (deep).
Operações de cópia rasa (Shallow copy operations)
A cópia rasa constrói um novo objeto composto e então (na medida do possível) insere referências nele aos objetos encontrados no original.
copy.copy(x) Retorna uma cópia rasa de x.
import copy
a = [[1],[2],[3]]
# Cria cópia rasa (listas aninhadas ainda são referenciadas)
b = copy.copy(a)
a
[[1], [2], [3]]
b
[[1], [2], [3]]
Sem importar o módulo copy você não pode usá-lo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'copy' is not defined
Operações de cópia profunda (Deep copy operations)
Uma cópia profunda constrói um novo objeto composto e então, recursivamente, insere cópias nele dos objetos encontrados no original.
copy.deepcopy(x[, memo]) Retorna uma cópia profunda de x.
import copy
a = [[1],[2],[3]]
# Cria cópia profunda (cópia completamente independente)
b = copy.deepcopy(a)
# Modifica o original
a[0][0] = 0
a[1] = None
a
[[0], None, [3]]
b
[[1], [2], [3]]