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
Libérer: 2024-12-07 01:11:15
original
567 Les gens l'ont consulté

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)
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

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

Sortie :

{1: 2}
{1: 2, 3: 4}
Copier après la connexion
  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)
Copier après la connexion

Sortie :

{1: 2, 'nested': {3: 4}}
{1: 2, 'nested': {3: 4, 5: 6}}
Copier après la connexion

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!

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