Verschachtelte Listenmutationen: Unerwartetes Verhalten verstehen
In Python können sich veränderliche Datenstrukturen wie Listen beim Verschachteln unerwartet verhalten. Betrachten Sie das Beispiel, in dem eine Liste von Listen erstellt wird:
xs = [[1] * 4] * 3
Dadurch wird eine verschachtelte Listenstruktur initialisiert, in der jede Unterliste vier Elemente enthält, die auf 1 gesetzt sind. Allerdings wird einer dieser innersten Werte geändert, wie unten gezeigt:
xs[0][0] = 5
beeinflusst alle ersten Elemente jeder Unterliste und führt zu:
[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
Ursache des unerwarteten Verhaltens
Die Ursache des Problems liegt darin, wie der *-Operator funktioniert, wenn er auf Objekte angewendet wird. In diesem Fall erstellt die Zeile:
[[1] * 4] * 3
drei Verweise auf dieselbe Unterliste [1] 4, anstatt drei unabhängige Kopien zu erstellen. Dies liegt daran, dass mit dem Ergebnis der Auswertung des Ausdrucks [1] * 4 arbeitet, bei dem es sich um eine einzelne Unterliste handelt. Daher werden alle Änderungen an dieser einzelnen Unterliste in allen Referenzen widergespiegelt.
Beheben des Problems
Um unabhängige Unterlisten zu erstellen, ist es notwendig, eine Auswertung der zu erzwingen [1] * 4 Ausdruck für jede Unterliste. Dies kann mithilfe eines Listenverständnisses erreicht werden, wie unten dargestellt:
[[1]*4 for _ in range(3)]
In diesem Fall wird der Ausdruck [1]*4 jedes Mal ausgewertet, was zur Erstellung von drei unterschiedlichen Unterlisten und etwaigen Änderungen führt auf eine Unterliste wirkt sich nur auf diese Unterliste aus und nicht auf die anderen.
Das obige ist der detaillierte Inhalt vonWarum wirkt sich das Ändern einer verschachtelten Liste in Python unerwartet auf alle Unterlisten aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!