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
Linda HamiltonOriginal
2024-11-25 01:54:11302Durchsuche

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)}
  • 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)])
  • 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))

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']}

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!

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