Heim > Backend-Entwicklung > Python-Tutorial > Warum ändert die Aktualisierung einer oberflächlichen Kopie eines Wörterbuchs nicht das Original?

Warum ändert die Aktualisierung einer oberflächlichen Kopie eines Wörterbuchs nicht das Original?

Barbara Streisand
Freigeben: 2024-12-01 11:21:10
Original
358 Leute haben es durchsucht

Why Doesn't Updating a Shallow Copy of a Dictionary Change the Original?

Warum aktualisiert die Aktualisierung des „Shallow“-Copy-Wörterbuchs nicht das „Original“-Wörterbuch?

Grundlegendes zu Shallow Copy

Wann Beim Erstellen einer flachen Kopie eines Wörterbuchs wird das Wörterbuchobjekt nicht vollständig kopiert. Stattdessen wird ein neuer Verweis auf das ursprüngliche Objekt erstellt. Dies bedeutet, dass alle an der flachen Kopie vorgenommenen Änderungen auch im Originalwörterbuch widergespiegelt werden.

Beispiel: Wörterbuch

Betrachten Sie das folgende Beispiel:

original = dict(a=1, b=2)
new = original.copy()
new.update({'c': 3})
Nach dem Login kopieren

Neu ist in diesem Fall eine oberflächliche Kopie des Originals. Wenn new mit {'c': 3} aktualisiert wird, bleibt das ursprüngliche Wörterbuch unverändert, da sowohl original als auch new auf dasselbe zugrunde liegende Objekt verweisen.

Im Gegensatz zum flachen Kopieren in Listen

Listen verhalten sich anders, wenn sie flach kopiert werden. Beim Erstellen einer flachen Kopie einer Liste wird ein neuer Verweis auf das zugrunde liegende Listenobjekt erstellt. Allerdings wirken sich alle an der flachen Kopie vorgenommenen Änderungen nicht auf die ursprüngliche Liste aus, da Listen veränderbare Objekte sind, die unabhängig voneinander geändert werden können.

Deep Copying verstehen

Im Gegensatz zu seichtem Durch Kopieren und tiefes Kopieren wird eine neue, unabhängige Kopie des Originalobjekts erstellt. Dies bedeutet, dass sich alle an der tiefen Kopie vorgenommenen Änderungen nicht auf das Originalobjekt auswirken.

Lösung

Um das Originalwörterbuch zu aktualisieren, muss eine tiefe Kopie erstellt werden statt einer flachen Kopie. Der folgende Code verwendet copy.deepcopy(), um eine tiefe Kopie zu erstellen:

import copy
new = copy.deepcopy(original)
new.update({'c': 3})
Nach dem Login kopieren

Jetzt bleibt das Original unberührt, während „new“ die aktualisierten Werte hat.

Das obige ist der detaillierte Inhalt vonWarum ändert die Aktualisierung einer oberflächlichen Kopie eines Wörterbuchs nicht das Original?. 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