Heim > Backend-Entwicklung > Python-Tutorial > Shallow vs. Deep Copy in Python-Wörterbüchern: Wann schlägt „copy()' fehl?

Shallow vs. Deep Copy in Python-Wörterbüchern: Wann schlägt „copy()' fehl?

Mary-Kate Olsen
Freigeben: 2024-11-22 20:20:13
Original
254 Leute haben es durchsucht

Shallow vs. Deep Copy in Python Dictionaries: When Does `copy()` Fail?

Shallow Copy vs. Deep Copy in Python: Die Auswirkungen auf Wörterbücher verstehen

Die flache Kopie eines Wörterbuchs in Python, erstellt mit dict .copy() aktualisiert das Originalwörterbuch möglicherweise nicht wie erwartet. Dieses Verhalten ergibt sich aus dem Konzept des flachen vs. tiefen Kopierens.

Was ist flaches Kopieren?

Bei einer flachen Kopie wird eher auf den Inhalt des Wörterbuchs verwiesen als nach Wert kopiert. Dies bedeutet, dass sowohl das ursprüngliche als auch das kopierte Wörterbuch auf dieselben zugrunde liegenden Datenstrukturen verweisen.

Demonstration:

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

Entgegen der Erwartung bleibt das ursprüngliche Wörterbuch unverändert nachdem die flache Kopie aktualisiert wurde. Dies liegt daran, dass die Verweise auf die Daten geteilt und nicht kopiert werden.

Wie sich Listen unterscheiden:

Im Gegensatz zu Wörterbüchern führt das flache Kopieren von Listen zu einem gemeinsamen Verweis auf die Daten. Dies liegt daran, dass Listen Werte durch Verweis enthalten.

>> original = [1, 2, 3]
>> new = original
>> new.append(4)
>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
Nach dem Login kopieren

In diesem Fall verweisen sowohl die ursprüngliche als auch die neue Liste auf dieselben Daten, sodass Änderungen an einer Liste Auswirkungen auf die andere haben.

Deep Copying mit copy.deepcopy()

Um eine wirklich eindeutige Kopie eines Wörterbuchs einschließlich seines Inhalts zu erstellen, muss copy.deepcopy() verwendet werden. Diese Funktion kopiert die Struktur und die Werte nach Wert und gewährleistet so eine vollständige Isolation.

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

Typen von Kopiervorgängen:

  1. Referenzzuweisung (a = b):Beide Variablen zeigen auf dasselbe Objekt.
  2. Shallow Copy (b = a.copy()): Separate Objekte, aber zugrunde liegende Daten werden gemeinsam genutzt.
  3. Deep Copy (b = copy.deepcopy(a)): Völlig isoliert, mit unterschiedlichen Strukturen und Werte.

Das obige ist der detaillierte Inhalt vonShallow vs. Deep Copy in Python-Wörterbüchern: Wann schlägt „copy()' fehl?. 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