Maison >développement back-end >Tutoriel Python >L'affectation Python crée-t-elle des copies ou des références à des objets ?

L'affectation Python crée-t-elle des copies ou des références à des objets ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-19 12:25:14239parcourir

Does Python Assignment Create Copies or References to Objects?

Python attribue-t-il des références ou des copies ?

Problème :

Le comportement d'affectation de Python peut prêter à confusion lorsque vous travaillez avec des objets comme dictionnaires. Considérez le code suivant :

dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'

print(dict_a)
print(dict_b)
print(dict_c)

Sortie attendue :

{}
{}
{'hello': 'goodbye'}

Sortie réelle :

{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}

Explication :

Les variables Python font référence aux objets en mémoire. Lorsque vous attribuez dict_a = dict_b, vous ne copiez pas l'objet dictionnaire lui-même mais attribuez plutôt une référence à la même adresse mémoire que dict_b. Cela signifie que les modifications apportées à un dictionnaire affecteront les trois variables puisqu'elles pointent vers le même objet sous-jacent.

Solution :

Pour créer une copie fidèle d'un objet en Python, vous devez utiliser les fonctions copy ou copy.deepcopy. Le code suivant créera des copies indépendantes du dictionnaire original :

dict_a = dict_b.copy()  # Shallow copy
dict_a = copy.deepcopy(dict_b)  # Deep copy
  • Copie superficielle : Crée un nouveau dictionnaire qui fait référence aux mêmes objets imbriqués que l'original.
  • Copie approfondie : Crée un nouveau dictionnaire et copie récursivement tous les imbriqués objets.

En utilisant ces fonctions, vous pouvez vous assurer que les modifications apportées à un dictionnaire n'affectent pas 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!

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