Heim >Backend-Entwicklung >Python-Tutorial >Warum wirkt sich die Änderung einer Unterliste auf alle Unterlisten aus, wenn die Listenmultiplikation in Python verwendet wird?

Warum wirkt sich die Änderung einer Unterliste auf alle Unterlisten aus, wenn die Listenmultiplikation in Python verwendet wird?

DDD
DDDOriginal
2024-12-22 08:24:101005Durchsuche

Why Does Modifying One Sublist Affect All Sublists When Using List Multiplication in Python?

Liste von Listenänderungen, die sich unerwartet auf Unterlisten auswirken

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.

Erklärung

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.

Lösung

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.

Vergleich mit der Listenmultiplikation

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.

Zusätzliche Ressourcen

  • [Wie klone ich eine Liste, damit sie sich danach nicht unerwartet ändert Zuweisung?](https://stackoverflow.com/questions/19850422/how-do-i-clone-a-list-so-that-it-doesnt-change-unexpectedly-after-assignment)
  • [So initialisieren Sie ein zweidimensionales Array (Liste von Listen, wenn NumPy nicht verwendet wird) in Python?](https://stackoverflow.com/questions/6951326/how-to-initialize-a-two-dimensional-array-list-of-lists-if-not-using-numpy-in-pyt)
  • [Liste des Wörterbuchs speichert jeweils nur den zuletzt angehängten Wert Iteration](https://stackoverflow.com/questions/10827325/list-of-dictionary-stores-only-last-appended-value-in-every-iteration)

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!

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