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

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

DDD
DDDOriginal
2024-10-26 14:52:03924Durchsuche

Here are a few title options, playing on the

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!

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