Heim > Artikel > Backend-Entwicklung > Hier sind einige Titeloptionen, die auf den Aspekten „Geheimnis“ und „unerwartetes Verhalten“ basieren: * Warum verhält sich „dict.fromkeys“ bei veränderlichen Objekten so seltsam? * Das Geheimnis von `d
Enthüllung des Geheimnisses von dict.fromkeys und veränderlichen Objekten
Die Funktion dict.fromkeys in Python kann sich unerwartet verhalten, wenn sie mit veränderlichen Objekten verwendet wird. wie im folgenden Beispiel gezeigt:
<code class="python">xs = dict.fromkeys(range(2), []) xs[0].append(1) # xs now contains {0: [1], 1: [1]} instead of {0: [1], 1: []}</code>
Das rätselhafte Verhalten
Dieses Verhalten widerspricht scheinbar dem von Wörterbuchverständnissen, die unterschiedliche Werte für jeden Schlüssel beibehalten:
<code class="python">xs = {i: [] for i in range(2)} xs[0].append(1) # xs still contains {0: [1], 1: []}</code>
Die Diskrepanz verstehen
Der Hauptunterschied liegt in der Art und Weise, wie diese beiden Methoden Wörterbücher erstellen. In Python 2.6 (und früher) verweist dict.fromkeys für alle Schlüssel auf dasselbe veränderbare Objekt, während Wörterbuchverständnisse für jeden Schlüssel unterschiedliche Objekte erstellen.
Das Ergebnis ist, dass xs[0] im ersten mutiert wird Beispielsweise wird die Änderung in xs[1] widergespiegelt, da sie auf dasselbe Listenobjekt verweisen. Im zweiten Beispiel hingegen sind die Listen unterschiedlich, sodass sich die Mutation von xs[0] nicht auf xs[1] auswirkt.
Überraschung vermeiden
Zu vermeiden Bei Auftreten dieses unerwarteten Verhaltens wird empfohlen, nach Möglichkeit Wörterbuchverständnisse zu verwenden. Wenn Wörterbuchverständnisse nicht verfügbar sind (z. B. in Python 2.6), ist das Erstellen eindeutiger Objekte mithilfe eines Generatorausdrucks mit der Diktfunktion eine Alternative:
<code class="python">xs = dict((i, []) for i in range(2))</code>
Das obige ist der detaillierte Inhalt vonHier sind einige Titeloptionen, die auf den Aspekten „Geheimnis“ und „unerwartetes Verhalten“ basieren: * Warum verhält sich „dict.fromkeys“ bei veränderlichen Objekten so seltsam? * Das Geheimnis von `d. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!