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!