Heim  >  Artikel  >  Backend-Entwicklung  >  Warum teilen verschachtelte Listen in Python dieselben zugrunde liegenden Daten?

Warum teilen verschachtelte Listen in Python dieselben zugrunde liegenden Daten?

DDD
DDDOriginal
2024-10-31 07:46:02271Durchsuche

Why Do Nested Lists in Python Share the Same Underlying Data?

Verschachtelte Listenindizes

In Python können verschachtelte Listen mithilfe einer Liste von Listen erstellt werden. Beim Ändern von Werten innerhalb dieser Listen tritt jedoch aufgrund der Referenzverarbeitung in Python eine häufige Gefahr auf.

Beachten Sie den folgenden Code:

<code class="python">some_list = 4 * [(4 * [0])]
for i in range(3):
    for j in range(3):
        some_list[i + 1][j + 1] = 1
for i in range(4):
    print(some_list[i])</code>

Die beabsichtigte Ausgabe lautet:

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

Die eigentliche Ausgabe lautet jedoch:

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

Das Problem verstehen

Das Problem ergibt sich aus der Zeile some_list = 4 * [(4 * [0 ])]. Hier erstellt der Ausdruck [(4 * [0])] eine einzelne Liste mit vier Elementen, von denen jedes eine Liste mit vier Nullen ist. Die anschließende Multiplikation 4 * erstellt jedoch vier Verweise auf dieselbe Liste und nicht auf vier unterschiedliche Listen.

Wenn ein Wert innerhalb eines Elements von some_list geändert wird, wirkt sich dies daher auch auf die anderen Elemente aus, da sie Alle verweisen auf dieselbe zugrunde liegende Liste. Dieses Verhalten wird in Python als Referenzübergabe bezeichnet.

Lösung

Um dieses Problem zu beheben und unabhängige Listen innerhalb von some_list zu erstellen, kann eine Schleife verwendet werden, um jede Unterliste einzeln zu erstellen , wie folgt:

<code class="python">some_list = [(4 * [0]) for _ in range(4)]</code>

Dieser Code erstellt vier verschiedene Listen mit jeweils vier Nullen. Das Ändern eines Werts innerhalb einer Unterliste hat keine Auswirkungen mehr auf die anderen Unterlisten.

Das obige ist der detaillierte Inhalt vonWarum teilen verschachtelte Listen in Python dieselben zugrunde liegenden Daten?. 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