Verwirrung der Veränderlichkeit verschachtelter Listen in Python
Einführung:
In Python ein häufiges Problem tritt beim Umgang mit verschachtelten Listen auf. An einer Unterliste vorgenommene Änderungen wirken sich unerwartet auf alle anderen Unterlisten in der äußeren Liste aus. Dieses unerwartete Verhalten ist auf den zugrunde liegenden Mechanismus der Listenerstellung und -veränderlichkeit zurückzuführen.
Das Problem:
Bedenken Sie den folgenden Code:
xs = [[1] * 4] * 3
Dies Code erstellt eine Liste von Listen, wobei jede Unterliste vier Einsen enthält. Allerdings wirkt sich die Änderung eines der innersten Elemente, wie unten gezeigt, auf alle Unterlisten aus:
xs[0][0] = 5
Anstatt nur das erste Element der ersten Unterliste zu ändern, werden alle ersten Elemente aller Unterlisten auf 5 geändert.
Grund:
Der Schlüssel zum Verständnis dieses Verhaltens liegt in der Art und Weise, wie Python sich multipliziert Sequenzen. Wenn Sie den *-Operator für eine vorhandene Liste [x] verwenden, werden keine neuen Listen erstellt. Stattdessen werden mehrere Verweise auf dasselbe Listenobjekt erstellt.
Als Ergebnis wird im Code xs = [[1] * 4] * 3 der Ausdruck [1] * 4 einmal und dreimal ausgewertet Verweise auf diese einzelne Liste werden der äußeren Liste zugewiesen. Dies bedeutet, dass alle Unterlisten dasselbe Objekt sind.
Lösung:
Um unabhängige Unterlisten zu erstellen, können Sie ein Listenverständnis verwenden:
xs = [[1] * 4 for _ in range(3)]
In diesem Fall wertet das Listenverständnis den Ausdruck [1] * 4 für jede Iteration neu aus, was zu drei eindeutigen Ergebnissen führt Listen.
Unveränderlichkeit von Ganzzahlen:
Es ist wichtig zu beachten, dass Ganzzahlen in Python unveränderlich sind, was bedeutet, dass ihr Wert nicht geändert werden kann. Auch wenn der *-Operator mehrere Verweise auf dieselbe Liste erstellt, bleiben die Werte der Ganzzahlen in dieser Liste daher unberührt.
Das obige ist der detaillierte Inhalt vonWarum wirkt sich das Ändern einer Unterliste in einer verschachtelten Python-Liste auf alle Unterlisten aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!