Pourquoi le dictionnaire de copie superficielle ne met pas à jour l'original
Lorsqu'il s'agit de structures de données, il est crucial de comprendre les nuances de la copie. Python propose deux méthodes de copie principales : la copie superficielle et la copie approfondie. Cet article examine la différence entre ces techniques, en examinant spécifiquement pourquoi la mise à jour d'une copie superficielle n'a pas d'impact sur le dictionnaire d'origine.
Copie superficielle de Python
dict.copy() effectue une copie superficielle d'un dictionnaire, ce qui signifie qu'il crée une nouvelle référence au même contenu. Le contenu n'est pas dupliqué par valeur mais partage la même référence mémoire.
Considérons l'exemple :
original = dict(a=1, b=2) new = original.copy() new.update({'c': 3})
Après la copie superficielle, toutes les modifications apportées à la nouvelle référence (nouvelle) seront modifier le dictionnaire original (original) car ils pointent vers les mêmes données sous-jacentes. Dans l'exemple, l'ajout de « c » : 3 à la copie superficielle met également à jour le dictionnaire d'origine.
Comprendre la copie profonde et la copie superficielle
Lorsque la copie superficielle ne crée que de nouvelles références à des données existantes, la copie profonde crée des objets entièrement nouveaux. Le contenu est dupliqué de manière récursive. Cela garantit que toute modification apportée à la nouvelle référence n'affecte pas l'original.
L'utilisation de copy.deepcopy() effectue une copie complète. Dans ce cas, toute modification apportée à la nouvelle référence (c) n'impactera pas le dictionnaire d'origine (a).
Conclusion
La copie superficielle en Python implique de créer de nouvelles des références à des données existantes, tandis que la copie approfondie crée des objets entièrement nouveaux avec des contenus dupliqués. Comprendre cette distinction est essentiel lorsqu'il s'agit de structures de données complexes, car elle détermine l'impact des modifications apportées à un objet sur les autres.
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!