Heim >Backend-Entwicklung >Python-Tutorial >Shallow vs. Deep Copy in Python-Wörterbüchern: Warum aktualisiert „copy()' das Original nicht?

Shallow vs. Deep Copy in Python-Wörterbüchern: Warum aktualisiert „copy()' das Original nicht?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-24 04:36:14829Durchsuche

Shallow vs. Deep Copy in Python Dictionaries: Why Doesn't `copy()` Update the Original?

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!

Stellungnahme:
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