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
Libérer: 2024-12-19 12:25:14
original
262 Les gens l'ont consulté

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)
Copier après la connexion

Sortie attendue :

{}
{}
{'hello': 'goodbye'}
Copier après la connexion

Sortie réelle :

{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}
Copier après la connexion

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
Copier après la connexion
  • 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 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