Maison > développement back-end > Tutoriel Python > Pourquoi la mise à jour d'une copie superficielle d'un dictionnaire ne modifie-t-elle pas l'original ?

Pourquoi la mise à jour d'une copie superficielle d'un dictionnaire ne modifie-t-elle pas l'original ?

Barbara Streisand
Libérer: 2024-12-01 11:21:10
original
358 Les gens l'ont consulté

Why Doesn't Updating a Shallow Copy of a Dictionary Change the Original?

Pourquoi la mise à jour du dictionnaire de copie « superficielle » ne met pas à jour le dictionnaire « original » ?

Comprendre la copie superficielle

Quand en créant une copie superficielle d'un dictionnaire, l'objet dictionnaire n'est pas entièrement copié. Au lieu de cela, une nouvelle référence à l'objet d'origine est créée. Cela signifie que toutes les modifications apportées à la copie superficielle seront également reflétées dans le dictionnaire d'origine.

Exemple : Dictionnaire

Considérons l'exemple suivant :

original = dict(a=1, b=2)
new = original.copy()
new.update({'c': 3})
Copier après la connexion

Dans ce cas, nouveau est une copie superficielle de l'original. Lorsque new est mis à jour avec {'c': 3}, le dictionnaire d'origine reste inchangé car l'original et le nouveau font référence au même objet sous-jacent.

Contraste avec la copie superficielle dans les listes

Les listes se comportent différemment lorsqu'elles sont copiées superficiellement. Lors de la création d'une copie superficielle d'une liste, une nouvelle référence à l'objet de liste sous-jacent est créée. Cependant, toute modification apportée à la copie superficielle n'affecte pas la liste d'origine, car les listes sont des objets mutables qui peuvent être modifiés indépendamment.

Comprendre la copie profonde

Contrairement à la copie superficielle la copie, la copie approfondie crée une nouvelle copie indépendante de l'objet original. Cela signifie que toute modification apportée à la copie complète n'affectera pas l'objet d'origine.

Solution

Pour mettre à jour le dictionnaire d'origine, il est nécessaire de créer une copie complète au lieu d'une copie superficielle. Le code suivant utilise copy.deepcopy() pour créer une copie complète :

import copy
new = copy.deepcopy(original)
new.update({'c': 3})
Copier après la connexion

Maintenant, l'original reste intact tandis que le nouveau a les valeurs mises à jour.

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