Maison >développement back-end >Tutoriel Python >Quelle est la différence entre l'affectation normale, la copie superficielle et la copie approfondie en Python ?

Quelle est la différence entre l'affectation normale, la copie superficielle et la copie approfondie en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-31 16:25:15196parcourir

What's the Difference Between Normal Assignment, Shallow Copy, and Deep Copy in Python?

Comprendre les différentes opérations de copie : affectation normale, copie superficielle et copie approfondie

En Python, il existe différentes manières de créer des copies de variables et des objets. Les opérations d'affectation normales, les copies superficielles et les copies profondes diffèrent dans la manière dont elles gèrent la relation entre les variables originales et copiées.

Affectation normale

Opérations d'affectation normales (par ex. , a = b) pointez simplement la nouvelle variable vers l'objet existant. Les deux variables font désormais référence au même objet en mémoire. Les modifications apportées à une variable affecteront l'autre.

Copie superficielle

Une copie superficielle crée un nouvel objet qui fait référence aux mêmes données sous-jacentes que l'objet d'origine. Pour les objets immuables (par exemple, chaînes, nombres), cela équivaut à une affectation normale. Cependant, pour les objets mutables (par exemple, listes, dictionnaires), le nouvel objet contient des références aux objets d'origine.

Dans l'extrait de code suivant :

import copy

a = [1, 2, 3]
b = copy.copy(a)

a et b sont tous deux des listes . Lors de la copie d'un à l'aide de copy.copy, une nouvelle liste est créée, mais elle contient des références aux mêmes éléments de liste que a. Par conséquent, modifier b modifiera également a.

Copie approfondie

Une copie approfondie crée un nouvel objet et copie récursivement toutes les données de l'objet d'origine. Cela signifie que même si l'objet d'origine contient des références à d'autres objets mutables, le nouvel objet aura des copies indépendantes de ces objets.

Dans l'extrait de code suivant :

import copy

a = [1, 2, 3]
c = copy.deepcopy(a)

c est un nouvelle liste qui contient ses propres copies des éléments de la liste. Toute modification apportée à c n'affectera pas a.

Conclusion

Le choix de l'opération de copie dépend du cas d'utilisation spécifique. Pour les objets immuables, une affectation normale ou une copie superficielle est suffisante. Pour les objets mutables, une copie approfondie est recommandée pour garantir que les modifications apportées à la copie n'affectent pas l'original.

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