Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erstellt „fromkeys“ mit veränderlichen Objekten gemeinsame Werte in Python-Wörterbüchern?

Warum erstellt „fromkeys“ mit veränderlichen Objekten gemeinsame Werte in Python-Wörterbüchern?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 11:05:29258Durchsuche

 Why Does `fromkeys` with Mutable Objects Create Shared Values in Python Dictionaries?

Wörterbucherstellung mit fromkeys und veränderlichen Objekten: Eine überraschende Wendung

Die fromkeys-Methode in Python ist eine praktische Möglichkeit, ein Wörterbuch aus einem zu erstellen Folge von Schlüsseln, die alle einem angegebenen Wert zugeordnet sind. Wenn jedoch veränderliche Objekte als Wert verwendet werden, kann ein unerwartetes Verhalten auftreten.

The Curiosity

Betrachten Sie das folgende Beispiel in Python 2.6 und 3.2:

<code class="python">xs = dict.fromkeys(range(2), [])
xs[0].append(1)
print(xs)</code>

Zu unserer Überraschung wirkt sich eine Änderung der Liste, die dem ersten Schlüssel ([0]) zugeordnet ist, auch auf die Liste aus, die dem zweiten Schlüssel ([1]) zugeordnet ist. Dies kann rätselhaft sein, da wir erwarten, dass jeder Schlüssel seinen eigenen unabhängigen Wert hat.

Die Offenbarung

Der Grund für dieses eigenartige Verhalten liegt in der Tatsache, dass die fromkeys-Methode erstellt ein neues Wörterbuch mit Verweisen auf dasselbe veränderbare Objekt, anstatt separate Kopien zu erstellen. Mit anderen Worten, alle Wörterbucheinträge verweisen auf dasselbe zugrunde liegende veränderliche Objekt.

Die Lösung

Um dieses Problem zu vermeiden, können wir Diktatverständnisse verwenden, die ein neues erstellen Liste für jeden Wörterbuchschlüssel:

<code class="python">xs = {i: [] for i in range(2)}
xs[0].append(1)
print(xs)</code>

In Python 2.6 und älter können wir ein ähnliches Verhalten erreichen, indem wir dict() mit einem Generatorausdruck verwenden:

<code class="python">xs = dict((i, []) for i in range(2))</code>

Diese alternative Methode erstellt auch separate Listen für jeden Wörterbuchschlüssel.

Fazit

Das Verständnis der Nuancen der Wörterbucherstellung mit veränderlichen Objekten ist wichtig, um unerwartetes Verhalten zu verhindern und die Datenintegrität im Python-Code aufrechtzuerhalten. Durch die Wahl der geeigneten Methode können wir sicherstellen, dass Wörterbucheinträge ordnungsgemäß isoliert werden und unerwünschte Nebenwirkungen vermieden werden.

Das obige ist der detaillierte Inhalt vonWarum erstellt „fromkeys“ mit veränderlichen Objekten gemeinsame Werte in Python-Wörterbüchern?. 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