Module Copy Python
Le module Copy est un ensemble de fonctions liées à la copie de différents éléments d’une liste, d’objets, de tableaux, etc. Il peut être utilisé pour créer des copies superficielles (shallow copies) ainsi que des copies profondes (deep copies).
De la documentation Python 3 ici
Les instructions d'affectation en Python ne copient pas les objets, elles créent des liaisons entre une cible et un objet. Pour les collections qui sont mutables ou contiennent des éléments mutables, une copie est parfois nécessaire afin de pouvoir modifier une copie sans modifier l'autre. Ce module fournit des opérations génériques de copie superficielle (shallow) et profonde (deep).
Opérations de copie superficielle (Shallow copy)
Une copie superficielle construit un nouvel objet composé, puis y insère (dans la mesure du possible) des références aux objets trouvés dans l’original.
copy.copy(x) Retourne une copie superficielle de x.
import copy
a = [[1],[2],[3]]
# Créer une copie superficielle (les listes imbriquées sont toujours référencées)
b = copy.copy(a)
a
[[1], [2], [3]]
b
[[1], [2], [3]]
Sans importer le module copy, vous ne pouvez pas l’utiliser
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'copy' is not defined
Opérations de copie profonde (Deep copy)
Une copie profonde construit un nouvel objet composé, puis y insère récursivement des copies des objets trouvés dans l’original.
copy.deepcopy(x[, memo]) Retourne une copie profonde de x.
import copy
a = [[1],[2],[3]]
# Créer une copie profonde (copie complètement indépendante)
b = copy.deepcopy(a)
# Modifier l'original
a[0][0] = 0
a[1] = None
a
[[0], None, [3]]
b
[[1], [2], [3]]