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

Patricia Arquette
Freigeben: 2024-10-26 11:05:29
Original
271 Leute haben es durchsucht

 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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!