Heim > Artikel > Backend-Entwicklung > Shallow vs. Deep Copy in Python-Wörterbüchern: Wann schlägt „copy()' fehl?
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:
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!