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]]