Shallow und Deep Copying verstehen: Warum Dictionary Shallow Copy das Original nicht aktualisiert
Bei der Arbeit mit Datenstrukturen in Python ist es von entscheidender Bedeutung den Unterschied zwischen flachem und tiefem Kopieren verstehen. Durch flaches Kopieren wird ein neuer Verweis auf die ursprüngliche Datenstruktur erstellt, während durch tiefes Kopieren eine völlig neue Datenstruktur mit isoliertem Inhalt erstellt wird.
Untersuchen wir das Verhalten von flachem Kopieren in Wörterbüchern. Im bereitgestellten Beispiel:
original = dict(a=1, b=2) new = original.copy() new.update({'c': 3})
Der Aufruf von copy() für das Wörterbuchoriginal erstellt ein neues Zuordnungsobjekt, new, das auf denselben Inhalt wie das Original verweist. Dies wird als flaches Kopieren bezeichnet. Wenn new mit {'c': 3} aktualisiert wird, ist nur new betroffen. Sowohl das Original als auch das Neue verweisen auf dieselbe zugrunde liegende Datenstruktur.
Representation after shallow copy: original: | {a: 1, b: 2} | new: | {a: 1, b: 2} |
Beim flachen Kopieren einer veränderlichen Datenstruktur, wie einer Liste:
original = [1, 2, 3] new = original
Ändern der neuen Liste (neu. append(4)) ändert auch die Originalliste (Original).
Representation after shallow copy for lists: original: | [1, 2, 3] | new: | [1, 2, 3] |
Der Hauptunterschied zwischen flachem und tiefem Kopieren liegt in der Art und Weise, wie sie gehandhabt werden verschachtelte Datenstrukturen. Durch tiefes Kopieren werden alle Inhalte rekursiv nach Wert kopiert, wodurch völlig isolierte Datenstrukturen entstehen:
import copy c = copy.deepcopy(a)
Representation after deep copy: original: | {a: [1, 2, 3]} | c: | {a: [1, 2, 3]} |
Zusammenfassend lässt sich sagen, dass flaches Kopieren auf die ursprüngliche Datenstruktur verweist, während durch tiefes Kopieren eine völlig neue, isolierte Struktur erstellt wird. Diese Unterscheidung wird besonders wichtig, wenn veränderbare Datenstrukturen geändert werden.
Das obige ist der detaillierte Inhalt vonShallow vs. Deep Copy in Python-Wörterbüchern: Warum aktualisiert „copy()' das Original nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!