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

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

Barbara Streisand
Freigeben: 2024-12-29 07:50:12
Original
334 Leute haben es durchsucht

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

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

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

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

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!

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