Parfois, une copie est nécessaire pour que vous puissiez modifier une copie sans en modifier une autre. Python a deux façons de faire des copies :
- Copie profonde
- Copie superficielle
Pour faire ces copies, nous utilisons copier le module
. Nous utilisons le module copy
pour les opérations de copie superficielle et profonde. Par exemple
# import copy module
import
copier
# initialiser la liste 1
li1
=
[
1
,
2
, [
3
,
5
],
4
]
# utiliser la copie pour une copie superficielle
li2
=
co py.copy ( li1)
# utiliser Deepcopy pour Deepcopy
li3
copy.deepcopy (li1)
Dans le code ci-dessus, copy ()
renvoie une copie superficielle de la liste, et deepcopy ()
renvoie une copie approfondie de la liste.
deepcopy
Copie en profondeur — c`est un processus dans lequel le processus de copie se produit de manière récursive. Cela signifie d`abord créer un nouvel objet de collection, puis le remplir de manière récursive avec des copies des objets enfants trouvés dans l`original. Dans le cas d`une copie complète, une copie d`un objet est copiée dans un autre objet. Cela signifie que toute modification apportée à la copie de l`objet n`est pas répercutée dans l`objet d`origine. En python, cela se fait à l`aide de la fonction deepcopy () .
# Code Python pour démontrer les opérations de copie
# import & quot; copier & quot; pour les opérations de copie
import
copier
# initialisation de la liste 1
li1
=
[
1
,
2
, [
3
,
5
],
4
]
# utiliser Deepcopy pour copier en profondeur
li2
=
copy.deepcopy (li1)
# éléments de la liste d`origine
print co de>
(
"Les éléments d`origine avant la copie en profondeur"
)
pour
i
in
range
(
0
,
len
(li1)) :
print
(li1 [i], end
=
" "
)
print
(
" "
)
# ajouter un élément à la nouvelle liste
li2 [
2
] [
0
]
=
7
# Le changement est reflété dans l2
print
(
"La nouvelle liste d`éléments après copie profonde "
)
for
i
in
plage
(
0
,
len
(li1)) :
print
(li2 [i], end
=
""
)
imprimer
(
""
)
# Le changement est NON reflété dans la liste d`origine
# comme une copie complète
imprimer
(
"Les éléments d`origine après copie en profondeur"
)
pour
i
dans
plage
(
0
,
len
(li1)):
print
(li1 [i], end
=
""
)
Quitter :
L`élément d`origine s avant copie profonde 1 2 [3, 5] 4 La nouvelle liste d`éléments après copie profonde 1 2 [7, 5] 4 Les éléments d`origine après copie profonde 1 2 [3, 5] 4
Dans l`exemple ci-dessus, une modification apportée à la liste n`a pas affecté les autres listes, indiquant une liste de copie en profondeur.
Copie superficielle
La copie superficielle signifie créer un nouvel objet de collection, puis le remplir avec des références aux objets enfants trouvés dans la version originale. Le processus de copie ne se répète pas et ne crée donc pas de copies des objets enfants eux-mêmes. Dans le cas d`une copie superficielle, une référence à un objet est copiée dans un autre objet. Cela signifie que toute modification apportée à la copie de l`objet est répercutée dans l`objet d`origine. Python le fait avec la fonction "copy () ".
|
Quitter :
Les éléments originaux avant la copie superficielle 1 2 [3, 5] 4 Les éléments d`origine après copie superficielle 1 2 [7, 5] 4
Dans l`exemple ci-dessus, la modification apportée à la liste est a pris effet sur une autre liste, indiquant que la liste a été copiée.
Points importants :
La différence entre les copies superficielles et profondes ne s`applique qu`aux objets composites (objets qui contiennent d`autres objets, tels que des listes ou des instances de classe) :
- La copie superficielle crée un nouvel objet composite puis (dans la mesure du possible) insère des références aux objets trouvés dans l`original.
- Une copie complète crée un nouvel objet composé, puis y insère de manière récursive des copies des objets trouvés dans l`original.