Heim >Backend-Entwicklung >Python-Tutorial >Warum wirkt sich die Änderung einer Unterliste auf alle Unterlisten aus, wenn die Listenmultiplikation in Python verwendet wird?
In Python das Erstellen einer Liste von Listen mithilfe der Listenmultiplikation, wie in [[1] 4] 3 führt dazu, dass sich Änderungen an einer Unterliste auf alle Unterlisten auswirken. Dieses Verhalten ist kontraintuitiv und kann zu unerwarteten Konsequenzen führen.
Bei Verwendung der Listenmultiplikation ist die neue Liste ein Verweis auf die ursprüngliche Liste. Wenn Sie ein Element der neuen Liste ändern, ändern Sie tatsächlich das Element in der ursprünglichen Liste, auf das alle Unterlisten verweisen.
Dieses unerwartete Verhalten tritt auf, weil Python den Multiplikationsoperator vor dem Listenverständnis auswertet . In diesem Fall ergibt [[1] 4] eine einzelne Unterliste und * erstellt einfach drei Verweise auf diese Unterliste.
Um dieses Verhalten zu vermeiden und drei unabhängige Verweise zu erstellen Unterlisten können Sie ein Listenverständnis wie folgt verwenden:
[[1] * 4 for _ in range(3)]
Das Listenverständnis wertet die [1] neu aus. * 4 Ausdrücke für jede Unterliste, was zu drei unterschiedlichen Unterlisten führt, die nicht verknüpft sind.
Die Listenmultiplikation ist zwar eine bequeme Möglichkeit, Listen mit sich wiederholenden Elementen zu erstellen, sie ist jedoch wichtig um seine Grenzen zu verstehen. Die Listenmultiplikation arbeitet mit vorhandenen Objekten, ohne Ausdrücke zu sehen. Es werden keine Kopien von Objekten erstellt, sondern Verweise auf vorhandene Objekte.
Im Gegensatz dazu werten Listenverständnisse Ausdrücke für jedes Element neu aus und erstellen bei Bedarf neue Objekte. Dieses Verhalten stellt sicher, dass jedes Element in der Liste unabhängig ist.
Das obige ist der detaillierte Inhalt vonWarum wirkt sich die Änderung einer Unterliste auf alle Unterlisten aus, wenn die Listenmultiplikation in Python verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!