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

Warum wirkt sich das Ändern eines verschachtelten Listenelements auf alle Unterlisten in Python aus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 04:34:02379Durchsuche

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

Indizes für verschachtelte Listen

Bei der Arbeit mit verschachtelten Listen in Python ist es wichtig, das Konzept der Listenreferenzen und deren Auswirkungen auf Listenindizes zu verstehen .

Referenzen auflisten

Im Gegensatz zu vielen Programmiersprachen, die Variablen als Wert übergeben, übergibt Python Listen als Referenz. Dies bedeutet, dass durch das Zuweisen einer Liste zu einer anderen Variablen ein Verweis auf dasselbe zugrunde liegende Listenobjekt im Speicher erstellt wird.

Verschachtelte Listenindizes

Im bereitgestellten Code tritt das Problem auf aus der Verwendung der Listenmultiplikation. Die Zeile some_list = 4 * [(4 * [0])] erstellt vier Verweise auf dasselbe Listenobjekt, was bedeutet, dass sich Änderungen an einer der Unterlisten auf alle vier auswirken.

Erwartete Ergebnisse

Die erwarteten Ergebnisse sind:

[0, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

Tatsächliche Ergebnisse

Die tatsächlichen Ergebnisse sind:

[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

Lösung

Um dieses Problem zu vermeiden, verwenden Sie eine Schleife, um eine verschachtelte Liste zu erstellen, ohne mehrere Verweise auf dieselbe Liste zu erstellen. Der korrigierte Code lautet:

some_list = [(4 * [0]) for _ in range(4)]

Diese Schleife erstellt vier unabhängige Listen mit jeweils vier Nullen und stellt so sicher, dass das erwartete Verhalten erreicht wird.

Das obige ist der detaillierte Inhalt vonWarum wirkt sich das Ändern eines verschachtelten Listenelements auf alle Unterlisten in Python aus?. 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