Objet de copie Python
- Utiliser Shallow Copy pour copier un objet en Python
- Utiliser Deep Copy pour copier un objet en Python
En Python, les instructions d’affectation n’ont pas le pouvoir de copier des objets mais génèrent simplement une nouvelle variable qui partage la référence à celle de l’objet d’origine.
La copie est très utile en programmation et est principalement nécessaire pour éditer le code d’une copie sans endommager l’autre.
Ce tutoriel abordera différentes méthodes pour copier un objet en Python.
Utiliser Shallow Copy pour copier un objet en Python
Le module copy
doit être importé pour utiliser l’opération de copie superficielle. Le module copy
fournit aux programmeurs la possibilité d’utiliser des opérations génériques de copie profonde et superficielle.
Une copie superficielle crée essentiellement un nouvel objet de collecte qui stocke les références des objets enfants trouvés dans les éléments d’origine. Ce processus n’est pas récursif et, par conséquent, ne crée aucune copie des objets enfants.
Lorsqu’une opération de copie superficielle se produit, une référence est copiée vers le nouvel objet. Cela signifie que si une modification est apportée à la copie de l’objet, ces modifications se refléteront également dans l’objet d’origine.
Le code suivant utilise l’opération Shallow copy
pour copier un objet en Python.
import copy
# the original list
ol = [2, 4, [1, 8], 6, 8]
# using copy to shallow copy
nl = copy.copy(ol)
print("Original list before shallow copy")
for x in range(0, len(ol)):
print(ol[x], end=" ")
print("\r")
# modfying the new list
nl[2][0] = 9
print("Original list after shallow copy")
for x in range(0, len(ol)):
print(ol[x], end=" ")
Production:
Original list before shallow copy
2 4 [1, 8] 6 8
Original list after shallow copy
2 4 [9, 8] 6 8
Comme mentionné précédemment, aucune copie du processus enfant n’est créée dans cette opération. Par conséquent, on peut dire que la copie superficielle n’est pas entièrement autonome et dépend de l’objet d’origine.
Utiliser Deep Copy pour copier un objet en Python
Nous devons importer le module copy
dans le code Python pour utiliser à la fois les opérations de copie profonde et superficielle.
Dans l’opération de copie profonde, le processus de copie se produit toujours de manière récursive. L’opération de copie profonde crée d’abord un nouvel objet de collecte, puis ajoute des copies des objets enfants trouvés dans les éléments d’origine.
Fondamentalement, dans le processus de deep copy
, une copie de l’objet d’origine est transmise au nouvel objet de collecte. Par conséquent, si une modification est apportée à la copie de l’objet, ces modifications ne se refléteront pas dans l’objet d’origine. Pour implémenter cette opération de copie profonde, nous utilisons la fonction deep copy
.
Le code suivant utilise la fonction deepcopy()
pour implémenter l’opération de copie profonde en Python.
import copy
# original list
ol = [2, 4, [1, 8], 6, 8]
# use deepcopy() to deep copy
nl = copy.deepcopy(ol)
# original elements of list
print("Original list before deep copying")
for x in range(0, len(ol)):
print(ol[x], end=" ")
print("\r")
# adding and element to new list
nl[2][0] = 9
# The second list after changes
print("The new list after modifications ")
for x in range(0, len(ol)):
print(nl[x], end=" ")
print("\r")
print("Original list after deep copying")
for x in range(0, len(ol)):
print(ol[x], end=" ")
Production:
Original list before deep copying
2 4 [1, 8] 6 8
The new list after modifications
2 4 [9, 8] 6 8
Original list after deep copying
2 4 [1, 8] 6 8
Comme indiqué dans les phrases ci-dessus, une copie profonde peut cloner les objets enfants de manière récursive, ce qui signifie qu’elle est autonome et ne dépend pas de l’objet d’origine.
Le seul inconvénient de la création d’une opération de copie approfondie est qu’elle est comparativement plus lente et prend plus de temps à réaliser qu’une opération de copie superficielle.
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn