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

Patricia Arquette
Freigeben: 2024-10-25 16:27:02
Original
157 Leute haben es durchsucht

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

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

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

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

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!

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!