Maison >développement back-end >Tutoriel Python >Copie superficielle ou profonde en Python : quand utiliser laquelle ?

Copie superficielle ou profonde en Python : quand utiliser laquelle ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-21 10:09:10208parcourir

Shallow vs. Deep Copy in Python: When to Use Which?

Comprendre les opérations de copie superficielle, de copie approfondie et d'affectation

Inefficacité de l'affectation normale

Les opérations d'affectation normales créent simplement une référence à l'objet existant, plutôt que d'en créer un nouveau. Cela peut entraîner des modifications imprévues, car les modifications apportées à l'objet d'origine seront également reflétées dans l'objet copié.

Copie superficielle : duplication au niveau de la surface

La copie superficielle La méthode copy construit un nouvel objet et insère des références aux objets existants contenus dans l'objet d'origine. Cela signifie que les modifications apportées aux objets enfants de l'objet d'origine seront également reflétées dans la copie superficielle.

Copie approfondie : réplication complète

La méthode de copie approfondie crée un nouvel objet et insère de manière récursive des copies des objets trouvés dans l'objet d'origine. Cela garantit que toute modification apportée aux objets enfants de l'objet d'origine n'affectera pas la copie complète.

Implications pour les objets mutables et immuables

Ces opérations de copie ont des implications différentes pour objets mutables et immuables :

  • Objets immuables (par exemple, chaînes, tuples) : Les copies superficielles et profondes ne font aucune différence, car les objets immuables ne peuvent pas être modifiés.
  • Objets mutables (par exemple, listes, dictionnaires) : Les copies superficielles conservent les références à les objets enfants de l'objet d'origine, tandis que les copies complètes créent de nouvelles instances de ces enfants objets.

Exemple

Considérez le code suivant :

import copy

a = "deepak"
b = (1, 2, 3, 4)
c = [1, 2, 3, 4]
d = {1: 10, 2: 20, 3: 30}

a1 = copy.copy(a)
b1 = copy.copy(b)
c1 = copy.copy(c)
d1 = copy.copy(d)

Pour les objets immuables comme les chaînes et les tuples (a et b dans dans ce cas), les copies superficielles et profondes créeront de nouveaux objets avec des adresses mémoire différentes. Cependant, pour les objets mutables comme les listes et les dictionnaires (c et d), les copies superficielles créeront de nouvelles références aux objets d'origine, tandis que les copies profondes créeront de nouvelles instances de ces objets.

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