Maison > développement back-end > Tutoriel Python > Pourquoi la modification d'une copie de liste modifie-t-elle parfois l'original : copie superficielle ou copie approfondie ?

Pourquoi la modification d'une copie de liste modifie-t-elle parfois l'original : copie superficielle ou copie approfondie ?

Patricia Arquette
Libérer: 2024-12-08 09:09:11
original
383 Les gens l'ont consulté

Why Does Modifying a List Copy Sometimes Change the Original: Shallow vs. Deep Copy?

Comment copier en profondeur une liste : comprendre les copies superficielles et profondes

Supposons que vous ayez une liste E0 et que vous créiez une copie E0_copy à l'aide de la liste (E0). Intuitivement, vous pourriez supposer que E0_copy est une copie complète puisque leurs identifiants diffèrent. Cependant, la modification de E0_copy dans une boucle modifie également E0 de manière inattendue. Pourquoi cela se produit-il ?

Le piège des copies superficielles

list(...) crée une copie superficielle, ce qui signifie qu'elle ne duplique que la liste la plus externe tout en conservant les références aux mêmes listes internes. Par conséquent, lorsque vous manipulez une liste interne de E0_copy, vous impactez également E0 car les deux listes pointent vers les mêmes structures internes.

La solution : la copie approfondie

Pour effectuer une copie complète, utilisez la fonction copy.deepcopy(...). Il crée une véritable copie profonde en copiant de manière récursive tous les objets, y compris les structures imbriquées. Cette opération garantit que les modifications apportées à la copie n'affectent pas l'original.

Démonstration

Considérez l'extrait de code suivant, où list(...) donne un copie superficielle :

a = [[1, 2, 3], [4, 5, 6]]
b = list(a)
print(a == b)  # True, indicates shallow copy
Copier après la connexion

Maintenant, en utilisant copy.deepcopy(...) pour une copie profonde copie :

import copy
b = copy.deepcopy(a)
print(a == b)  # False, confirms deep copy
Copier après la connexion

Maintenant, la modification de a n'affecte pas b, démontrant l'isolement fourni par la copie profonde.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal