La différence entre la copie profonde et la copie superficielle de Python

En Python, l'affectation et la copie d'objets sont différentes car elles impliquent le référencement et la copie d'objets. Lorsque vous créez une nouvelle variable à l'aide d'une instruction d'affectation, elles feront référence au même objet. Dans certains cas, vous souhaiterez peut-être créer un objet complètement indépendant, auquel cas une copie est requise.

La copie en Python est divisée en copie approfondie et copie superficielle :

Copie superficielle : elle copie uniquement la référence à l'objet, pas l'objet lui-même. L'objet d'origine et l'objet copié partagent la même adresse mémoire. Cela signifie que si vous modifiez l'objet copié, l'objet d'origine sera affecté car il s'agit en réalité du même objet. Des copies superficielles peuvent être créées à l'aide du découpage, de la méthode copy() ou de fonctions d'usine.

Copie profonde : elle copie de manière récursive un objet et tous ses sous-objets, plutôt que de copier leurs références. Une copie complète crée un objet complètement indépendant en mémoire, donc les modifications apportées à l'objet copié n'affecteront pas l'objet d'origine. Des copies complètes peuvent être créées à l'aide de la fonction deepcopy() dans le module de copie.

Voici quelques exemples de code pour mieux comprendre ces concepts :

import copy

# 浅拷贝示例
list1 = [[1, 2], [3, 4]]
list2 = list1.copy()
list1[0][0] = 5
print(list2)   # Output: [[5, 2], [3, 4]]

# 深拷贝示例
list1 = [[1, 2], [3, 4]]
list2 = copy.deepcopy(list1)
list1[0][0] = 5
print(list2)   # Output: [[1, 2], [3, 4]]

Dans le code ci-dessus, nous créons d’abord une liste list1 qui contient deux sous-listes. Nous créons ensuite une nouvelle liste list2 en utilisant une copie superficielle, qui fait référence à la même sous-liste. Lorsque nous modifions la première sous-liste de list1, list2 sera également modifiée puisqu'elles partagent la même sous-liste.

Ensuite, nous utilisons une copie complète pour créer list2, qui contient une copie complète de list1, y compris les sous-listes. Lorsque nous modifions la première sous-liste de list1, list2 ne sera pas modifiée car elles ont des sous-listes différentes.

Je suppose que tu aimes

Origine blog.csdn.net/qq_39962271/article/details/129332520
conseillé
Classement