Heim  >  Artikel  >  Backend-Entwicklung  >  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
Mary-Kate OlsenOriginal
2024-11-22 20:20:13195Durchsuche

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}

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])

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}

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!

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