„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum verursacht die Verwendung des Sternbetreibers zum Initialisieren einer Liste der Listenverknüpfungen?

Warum verursacht die Verwendung des Sternbetreibers zum Initialisieren einer Liste der Listenverknüpfungen?

Gepostet am 2025-02-12
Durchsuche:301

Why Does Using the Star Operator to Initialize a List of Lists Cause Linkage?

Warum verknüpft dieser Code für die Initialisierung einer Liste von Listen anscheinend die Listen? = [[]] * n kann zu unerwartetem Verhalten führen, bei dem die Listen miteinander verbunden zu sein scheinen.

Dieses Problem entsteht, weil der in [[]]] * n verwendete Stern ( *) eine Liste von Referenzen erstellt zu demselben zugrunde liegenden Listenobjekt. Wenn Sie eine der Listen in der Sequenz ändern, werden die Änderungen in allen anderen Listen widerspiegelt, da sie alle auf dasselbe Objekt beziehen.

Lösung

, um eine Liste verschiedener Listen zu erstellen Es ist wichtig, jede Liste separat zu initialisieren. Dies kann mit der folgenden Syntax erreicht werden:

x = [] für i in Bereich (n)]
x = [[] for i in range(n)]

In diesem Beispiel enthält die Liste X drei Verweise auf dasselbe Listenobjekt, sodass alle Änderungen an einer Liste beeinflusst werden Die anderen.

hingegen erstellt der folgende Code -Snippet eine Liste von drei verschiedenen Listen:

x = [] für i in Bereich (3)] x [1] .Append (0) print (x) # output: [[], [0], []]
x = [[]] * 3
x[1].append(0)
print(x)  # Output: [[0], [0], [0]]
Freigabeerklärung Dieser Artikel wird reproduziert unter: 1729212679 Wenn ein Verstoß vorliegt, wenden Sie sich bitte an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3