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
Freigeben: 2024-11-24 04:36:14
Original
818 Leute haben es durchsucht

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})
Nach dem Login kopieren

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}   |
Nach dem Login kopieren

Beim flachen Kopieren einer veränderlichen Datenstruktur, wie einer Liste:

original = [1, 2, 3]
new = original
Nach dem Login kopieren

Ä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]  |
Nach dem Login kopieren

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)
Nach dem Login kopieren
Representation after deep copy:

original: |  {a: [1, 2, 3]}  |
c:        |  {a: [1, 2, 3]}  |
Nach dem Login kopieren

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!

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