Heim > Backend-Entwicklung > Python-Tutorial > Warum verändert das Ändern einer Listenkopie manchmal das Original: flache oder tiefe Kopie?

Warum verändert das Ändern einer Listenkopie manchmal das Original: flache oder tiefe Kopie?

Patricia Arquette
Freigeben: 2024-12-08 09:09:11
Original
383 Leute haben es durchsucht

Why Does Modifying a List Copy Sometimes Change the Original: Shallow vs. Deep Copy?

So kopieren Sie eine Liste tief: Flache vs. tiefe Kopien verstehen

Angenommen, Sie haben eine Liste E0 und erstellen eine Kopie E0_copy mit list (E0). Intuitiv könnte man annehmen, dass es sich bei E0_copy um eine tiefe Kopie handelt, da sich ihre IDs unterscheiden. Wenn Sie jedoch E0_copy in einer Schleife ändern, wird auch E0 unerwartet geändert. Warum passiert das?

Die Gefahr flacher Kopien

list(...) erstellt eine flache Kopie, was bedeutet, dass nur die äußerste Liste dupliziert wird, während Referenzen erhalten bleiben zu den gleichen inneren Listen. Wenn Sie also eine innere Liste von E0_copy bearbeiten, wirkt sich dies auch auf E0 aus, da beide Listen auf dieselben internen Strukturen verweisen.

Die Lösung: Deep Copying

Zur Durchführung Um eine tiefe Kopie zu erstellen, verwenden Sie die Funktion copy.deepcopy(...). Es erstellt eine echte tiefe Kopie, indem alle Objekte, einschließlich verschachtelter Strukturen, rekursiv kopiert werden. Dieser Vorgang stellt sicher, dass an der Kopie vorgenommene Änderungen keine Auswirkungen auf das Original haben.

Demonstration

Betrachten Sie den folgenden Codeausschnitt, bei dem list(...) zu a führt flache Kopie:

a = [[1, 2, 3], [4, 5, 6]]
b = list(a)
print(a == b)  # True, indicates shallow copy
Nach dem Login kopieren

Nun verwenden wir copy.deepcopy(...) für tief Kopieren:

import copy
b = copy.deepcopy(a)
print(a == b)  # False, confirms deep copy
Nach dem Login kopieren

Das Ändern von a wirkt sich nun nicht auf b aus, was die Isolation durch tiefes Kopieren demonstriert.

Das obige ist der detaillierte Inhalt vonWarum verändert das Ändern einer Listenkopie manchmal das Original: flache oder tiefe Kopie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage