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
Libérer: 2024-12-21 10:09:10
original
207 Les gens l'ont consulté

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

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!

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