logo

copier en Python (Deep Copy et Shallow Copy)

Dans Python , Les instructions d'affectation ne copient pas les objets, elles créent des liaisons entre une cible et un objet. Quand on utilise le = opérateur, il crée uniquement une nouvelle variable qui partage la référence de l'objet d'origine. Afin de créer de vraies copies ou clones de ces objets, nous pouvons utiliser le module de copie dans Python .

Syntaxe de Python Deepcopy

Syntaxe: copie.deepcopy(x)



Syntaxe de Python Shallowcopy

Syntaxe: copie.copie(x)

Exemple:

Afin de réaliser ces copies, nous utilisons le module de copie. copy() renvoie une copie superficielle de la liste et deepcopy() renvoie une copie complète de la liste. Comme vous pouvez le voir, les deux ont la même valeur mais ont des identifiants différents.

Exemple: Ce code présente l'utilisation ducopy>module pour créer des copies superficielles et profondes d'une liste imbriquéeli1>. Une copie superficielle,li2>, est créé à l'aide copy.copy()> , en préservant la structure de niveau supérieur mais en partageant les références aux listes internes. Une copie profonde,li3>, est créé à l'aide copy.deepcopy()> , résultant en une copie complètement indépendante deli1>, y compris tous les éléments imbriqués. Le code imprime les identifiants et les valeurs deli2>etli3>, soulignant la distinction entre les copies superficielles et profondes en termes de référence et d'indépendance.



Python3






import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.copy(li1)> print>(>'li2 ID: '>,>id>(li2),>'Value: '>, li2)> li3>=> copy.deepcopy(li1)> print>(>'li3 ID: '>,>id>(li3),>'Value: '>, li3)>

>

>

Sortir:

  li2 ID:   2521878674624   Value:   [1, 2, [3, 5], 4]   li3 ID:   2521878676160   Value:   [1, 2, [3, 5], 4]>

Qu’est-ce que la copie profonde en Python ?

Une copie complète crée un nouvel objet composé avant d'y insérer des copies des éléments trouvés dans l'original de manière récursive. Cela signifie d'abord construire 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 profonde, une copie de l'objet est copiée dans un autre objet. Cela signifie que tout changement faite à une copie de l'objet ne se reflète pas dans l'objet original.

Copie profonde en Python

Exemple:

Dans l'exemple ci-dessus, la modification apportée à la liste n'a pas affecté d'autres listes, indiquant que la liste est profondément copiée.

Ce code illustre la copie approfondie d'une liste avec des éléments imbriqués à l'aide de lacopy>module. Il imprime dans un premier temps les éléments originaux deli1>, puis les copie en profondeur pour créerli2>. Une modification d'un élément dansli2>n'affecte pasli1>, comme le démontrent les impressions séparées. Cela met en évidence la manière dont la copie approfondie crée une copie indépendante, préservant le contenu de la liste d'origine même après des modifications apportées à la copie.

télécharger des vidéos YouTube VLC

Python3




import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.deepcopy(li1)> print> (>'The original elements before deep copying'>)> for> i>in> range>(>0>,>len>(li1)):> >print> (li1[i],end>=>' '>)> print>(>' '>)> li2[>2>][>0>]>=> 7> print> (>'The new list of elements after deep copying '>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li2[i],end>=>' '>)> print>(>' '>)> print> (>'The original elements after deep copying'>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li1[i],end>=>' '>)>

>

>

Sortir:

The original elements before deep copying 1 2 [3, 5] 4 The new list of elements after deep copying 1 2 [7, 5] 4 The original elements after deep copying 1 2 [3, 5] 4>

Qu’est-ce que la copie superficielle en Python ?

Une copie superficielle crée un nouvel objet composé, puis référence les objets contenus dans l'original, ce qui signifie qu'elle construit un nouvel objet de collection, puis le remplit avec des références aux objets enfants trouvés dans l'original. Le processus de copie n’est pas récurent et ne créera donc pas de copies des objets enfants eux-mêmes. Dans le cas d'une copie superficielle, une référence d'un objet est copiée dans un autre objet. Cela signifie que tout changement faite à une copie d'un objet reflète dans l'objet d'origine. En python, ceci est implémenté en utilisant le copie() fonction.

Copie superficielle en Python

Exemple:

Dans cet exemple, la modification apportée à la liste a affecté une autre liste, indiquant que la liste est copiée superficiellement. Les points importants: La différence entre la copie superficielle et la copie profonde n'est pertinente que pour les objets composés (objets qui contiennent d'autres objets, comme des listes ou des instances de classe) :

  • Une copie superficielle construit un nouvel objet composé puis (dans la mesure du possible) y insère des références aux objets trouvés dans l'original.
  • Une copie profonde construit un nouvel objet composé puis, de manière récursive, y insère des copies des objets trouvés dans l'original.

Exemple: Ce code illustre la copie superficielle d'une liste avec des éléments imbriqués à l'aide de la ' copy'> module. Dans un premier temps, il imprime les éléments originaux deli1>, puis effectue une copie superficielle dansli2>. Modifier un élément dansli2>affecte l'élément correspondant dansli1,>car les deux listes partagent des références aux listes internes. Cela montre que la copie superficielle crée une nouvelle liste, mais elle ne fournit pas une indépendance totale aux éléments imbriqués.

Python3




import> copy> li1>=> [>1>,>2>, [>3>,>5>],>4>]> li2>=> copy.copy(li1)> print> (>'The original elements before shallow copying'>)> for> i>in> range>(>0>,>len>(li1)):> >print> (li1[i],end>=>' '>)> print>(>' '>)> li2[>2>][>0>]>=> 7> print> (>'The original elements after shallow copying'>)> for> i>in> range>(>0>,>len>( li1)):> >print> (li1[i],end>=>' '>)>

top 10 hentaï
>

>

Sortir:

The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>

ARTICLES RECOMMANDÉS Différence entre la copie superficielle et profonde d'une classe