Heim > Backend-Entwicklung > Python-Tutorial > Warum wirkt sich das Ändern einer verschachtelten Liste in Python unerwartet auf alle Unterlisten aus?

Warum wirkt sich das Ändern einer verschachtelten Liste in Python unerwartet auf alle Unterlisten aus?

Linda Hamilton
Freigeben: 2025-01-01 11:10:09
Original
929 Leute haben es durchsucht

Why Does Modifying a Nested List in Python Unexpectedly Affect All Sublists?

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

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

beeinflusst alle ersten Elemente jeder Unterliste und führt zu:

[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
Nach dem Login kopieren

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

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

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!

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