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

Pourquoi la mise à jour d'une copie superficielle d'un dictionnaire Python n'affecte-t-elle pas l'original ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-23 22:43:12834parcourir

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

Comprendre la copie superficielle dans les dictionnaires Python : pourquoi les mises à jour dans la copie n'affectent pas l'original

Lorsque vous travaillez avec des dictionnaires Python, il est important de comprendre la distinction entre la copie superficielle et profonde. Une copie superficielle crée un nouveau dictionnaire contenant des références aux mêmes objets que le dictionnaire d'origine, tandis qu'une copie profonde crée un nouveau dictionnaire avec des copies des objets.

Copie superficielle avec dict.copy()

La méthode dict.copy() effectue une copie superficielle d'un dictionnaire. Cela signifie que le nouveau dictionnaire contiendra des références aux mêmes objets que ceux stockés dans le dictionnaire d'origine. Par conséquent, toutes les modifications apportées à la copie seront également reflétées dans le dictionnaire d'origine.

Exemple :

original = {'a': 1, 'b': 2}
new = original.copy()
new.update({'c': 3})

print(original)  # {'a': 1, 'b': 2}
print(new)  # {'a': 1, 'c': 3, 'b': 2}

Dans cet exemple, le dict.copy () crée un nouveau dictionnaire, new, qui contient des références aux mêmes objets que le dictionnaire d'origine. Lorsque nous mettons à jour la copie avec {'c' : 3}, l'original et la copie reflètent ce changement.

Pourquoi les mises à jour dans la copie n'affectent pas l'original

La raison pour laquelle les mises à jour dans une copie superficielle n'affectent pas l'original est que la copie ne contient que des références aux objets. Lorsque nous mettons à jour la copie, nous ne modifions pas les objets réels, mais uniquement les références.

Cela contraste avec une liste, où une copie superficielle contient une référence à la liste elle-même et non aux éléments qu'elle contient. Lorsque nous mettons à jour la copie d'une liste, nous mettons à jour les éléments de la liste, ce qui affecte à la fois la copie et l'original.

Copie approfondie avec copy.deepcopy()

Pour créer une copie d'un dictionnaire complètement isolée de l'original, nous pouvons utiliser la fonction copy.deepcopy(). Cette fonction copie récursivement tous les objets du dictionnaire, créant une nouvelle structure avec des références distinctes.

Exemple :

import copy

original = {'a': 1, 'b': 2}
new = copy.deepcopy(original)
new.update({'c': 3})

print(original)  # {'a': 1, 'b': 2}
print(new)  # {'a': 1, 'c': 3, 'b': 2}

Dans cet exemple, le copy.deepcopy( ) crée un nouveau dictionnaire, new, qui contient des copies des objets du dictionnaire d'origine. Lorsque nous mettons à jour la copie, le dictionnaire original n'est pas affecté.

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!

Déclaration:
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