Heim >Backend-Entwicklung >Python-Tutorial >Shallow vs. Deep Copy in Python-Listen: Wann sollte ich „copy.deepcopy()' verwenden?
Deep Copying Lists: Beyond Shallow Approaches
Wenn man versucht, eine Liste mit list(...) zu kopieren, könnte man annehmen, dass sie erstellt wird eine tiefe Kopie basierend auf der Beobachtung, dass sich id(E0) von id(E0_copy) unterscheidet. Diese Annahme ist jedoch fehlerhaft.
Shallow Copying Trap
list(...) führt keine tiefe Kopie durch, bei der innere Objekte rekursiv kopiert werden. Stattdessen wird nur die äußerste Liste kopiert und die Verweise auf die ursprünglichen inneren Listen beibehalten. Daher wirken sich Änderungen an den inneren Listen sowohl auf die ursprüngliche als auch auf die kopierte Liste aus.
Deep Copying mit copy.deepcopy
Um eine echte Deep Copy zu erstellen, verwenden Sie copy. Deepcopy(...). Diese Methode kopiert rekursiv alle Ebenen von Objekten und stellt so sicher, dass Änderungen an der Kopie keine Auswirkungen auf das Original haben.
Beispiel
Bedenken Sie den folgenden Codeausschnitt:
>>> a = [[1, 2, 3], [4, 5, 6]] >>> b = list(a) >>> a [[1, 2, 3], [4, 5, 6]] >>> b [[1, 2, 3], [4, 5, 6]] >>> a[0][1] = 10 >>> a [[1, 10, 3], [4, 5, 6]] >>> b # b changes too -> Not a deepcopy. [[1, 10, 3], [4, 5, 6]]
In diesem Beispiel erstellt list(...) eine flache Kopie von a. Wenn a[0][1] geändert wird, ändert sich auch b, was darauf hinweist, dass sie auf dieselben inneren Listen verweisen.
Vergleichen Sie dies mit Folgendem:
>>> import copy >>> b = copy.deepcopy(a) >>> a [[1, 10, 3], [4, 5, 6]] >>> b [[1, 10, 3], [4, 5, 6]] >>> a[0][1] = 9 >>> a [[1, 9, 3], [4, 5, 6]] >>> b # b doesn't change -> Deep Copy [[1, 10, 3], [4, 5, 6]]
Mit copy.deepcopy, Wir erstellen eine echte tiefe Kopie von a. Änderungen an a wirken sich nicht auf b aus und bestätigen, dass es sich um unterschiedliche Objekte mit eigenen Kopien innerer Listen handelt.
Fazit
Wenn das tiefe Kopieren von Listen unerlässlich ist, denken Sie daran Verwenden Sie copy.deepcopy(...), um sicherzustellen, dass Änderungen an der Kopie keine Auswirkungen auf das Original haben. Dieses Verständnis ist entscheidend für die Aufrechterhaltung der Datenintegrität und die Vermeidung unerwarteter Konsequenzen in Ihrem Code.
Das obige ist der detaillierte Inhalt vonShallow vs. Deep Copy in Python-Listen: Wann sollte ich „copy.deepcopy()' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!