Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erstellt „dict.fromkeys()“ gemeinsam genutzte veränderbare Objekte in Python?

Warum erstellt „dict.fromkeys()“ gemeinsam genutzte veränderbare Objekte in Python?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 16:27:02148Durchsuche

 Why does `dict.fromkeys()` create shared mutable objects in Python?

Wörterbucherstellung und veränderliche Objekte: Überraschendes Verhalten mit fromkeys

Beim Erstellen von Wörterbüchern mit dict.fromkeys() in Python kann es zu einer unerwarteten Situation kommen entstehen, wenn veränderliche Objekte als Werte verwendet werden. Betrachten Sie das folgende Beispiel:

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

Obwohl zwei separate Listenobjekte als Werte für die Wörterbuchschlüssel 0 und 1 erstellt werden, wird durch das Hinzufügen eines Elements zur Liste am Index 0 dieses auch zur Liste am Index 1 hinzugefügt. Dies tritt auf, weil fromkeys jeden Schlüssel an die gleiche Referenz des veränderlichen Objekts bindet, was zu gemeinsamen Änderungen führt.

Im Gegensatz dazu weisen Wörterbuchverständnisse in Python 3.2 ein unterschiedliches Verhalten auf:

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

Hier jeweils Der Schlüssel ist an ein eindeutiges Listenobjekt gebunden. Das Anhängen eines Elements an die Liste bei Index 0 hat keine Auswirkungen auf die Liste bei Index 1.

Warum der Unterschied?

Das Verhalten von fromkeys kann durch Betrachtung der verstanden werden Folgender äquivalenter Code:

<code class="python">a = []
xs = dict.fromkeys(range(2), a)</code>

Jeder Schlüssel im resultierenden Wörterbuch verweist auf dasselbe Objekt, was zu den beobachteten gemeinsamen Änderungen führt.

Um das gewünschte Verhalten unterschiedlicher veränderlicher Objekte für jeden Schlüssel zu erreichen , verwenden Sie Wörterbuchverständnisse oder verwenden Sie für Python 2.6 und früher ohne Wörterbuchverständnisse dict() mit einem Generatorausdruck:

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

Das obige ist der detaillierte Inhalt vonWarum erstellt „dict.fromkeys()“ gemeinsam genutzte veränderbare Objekte in Python?. 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