Heim > Backend-Entwicklung > Python-Tutorial > Warum erstellt „dict.fromkeys()' freigegebene Listen und wie kann ich das vermeiden?

Warum erstellt „dict.fromkeys()' freigegebene Listen und wie kann ich das vermeiden?

Linda Hamilton
Freigeben: 2024-11-25 01:54:11
Original
215 Leute haben es durchsucht

Why Does `dict.fromkeys()` Create Shared Lists, and How Can I Avoid It?

Fromkeys-Vorbehalte: Das Verhalten der Wörterbuchinitialisierung verstehen

In Python wird die Methode dict.fromkeys() häufig zum Erstellen eines Wörterbuchs verwendet mit angegebenen Schlüsseln, die leeren Listen zugewiesen sind. Eine Fehlinterpretation seines Verhaltens hat jedoch zu unerwarteten Ergebnissen geführt.

Warum fromkeys() schwierig ist

Wenn eine leere Liste [] als zweites Argument zum Diktieren bereitgestellt wird .fromkeys() verweisen alle Werte im resultierenden Wörterbuch auf das gleiche Listenobjekt. Dies bedeutet, dass sich jede Änderung an einem Wert auf alle Werte auswirkt.

Alternative Lösungen

Um dieses Problem zu beheben, werden die folgenden Lösungen empfohlen:

  • Verwenden Sie ein Wörterbuchverständnis:

    In Python 2.7 oder höher ist ein Wörterbuchverständnis die prägnanteste und lesbarste Lösung:

    data = {k: [] for k in range(2)}
    Nach dem Login kopieren
  • Verwenden Sie ein Listenverständnis mit dict():

    In früheren Python-Versionen kann ein Listenverständnis an dict() übergeben werden Konstruktor:

    data = dict([(k, []) for k in range(2)])
    Nach dem Login kopieren
  • Verwenden Sie einen Generatorausdruck mit dict():

    In Python 2.4-2.6 kann ein Generatorausdruck verwendet werden mit dict() und Klammern können sein weggelassen:

    data = dict((k, []) for k in range(2))
    Nach dem Login kopieren

Beispiel

Das folgende Beispiel veranschaulicht den Unterschied zwischen dem Standardverhalten von fromkeys() und den empfohlenen Lösungen:

# Default behavior of fromkeys()
data = {}
data = data.fromkeys(range(2), [])
data[1].append('hello')
print(data)  # Output: {0: ['hello'], 1: ['hello']}

# Using a dictionary comprehension
data = {k: [] for k in range(2)}
data[1].append('hello')
print(data)  # Output: {0: [], 1: ['hello']}
Nach dem Login kopieren

Durch das Verständnis der Nuancen von fromkeys() können Entwickler effektiv Wörterbücher mit leeren Listen erstellen und einzelne Schlüssel verwalten Adressierung.

Das obige ist der detaillierte Inhalt vonWarum erstellt „dict.fromkeys()' freigegebene Listen und wie kann ich das vermeiden?. 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