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!