Maison >développement back-end >Tutoriel Python >Comment fonctionne l'affectation d'objets de Python et comment puis-je créer des copies indépendantes ?

Comment fonctionne l'affectation d'objets de Python et comment puis-je créer des copies indépendantes ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 01:11:15591parcourir

How Does Python's Object Assignment Work, and How Can I Create Independent Copies?

Comprendre l'affectation d'objets en Python

En Python, les opérateurs d'affectation, tels que =, ne créent pas de copies d'objets. Au lieu de cela, ils font référence à des objets existants en mémoire. Ce comportement peut entraîner des conséquences inattendues, comme le démontre 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'}

Dans ce Par exemple, nous comptions créer trois dictionnaires indépendants. Cependant, le résultat montre que dict_a, dict_b et dict_c font tous référence au même objet dictionnaire. L'attribution d'une clé à dict_c modifie le dictionnaire partagé, ce qui se reflète dans les trois variables.

Résolution des problèmes d'affectation d'objets

Pour obtenir le comportement souhaité de création de copies indépendantes, Python propose plusieurs options :

  1. Méthode dict.copy() : Cette méthode crée une copie superficielle du dictionnaire, en copiant tous ses paires clé-valeur dans un nouvel objet.
dict_a = {1: 2}
dict_b = dict_a.copy()
dict_b[3] = 4

print(dict_a)
print(dict_b)

Sortie :

{1: 2}
{1: 2, 3: 4}
  1. fonction copy.deepcopy() : Cette fonction crée une copie complète du dictionnaire, incluant tous les imbriqués objets.
import copy

dict_a = {1: 2, 'nested': {3: 4}}
dict_b = copy.deepcopy(dict_a)
dict_b['nested'][5] = 6

print(dict_a)
print(dict_b)

Sortie :

{1: 2, 'nested': {3: 4}}
{1: 2, 'nested': {3: 4, 5: 6}}

En utilisant ces méthodes, il est possible de contrôler l'affectation d'objets en Python et d'empêcher les modifications involontaires des objets partagés.

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