Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ändert „list.__iadd__“ sowohl die ursprüngliche als auch die zugewiesene Liste, während „list.__add__“ nur die zugewiesene Liste ändert?

Warum ändert „list.__iadd__“ sowohl die ursprüngliche als auch die zugewiesene Liste, während „list.__add__“ nur die zugewiesene Liste ändert?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 17:05:25532Durchsuche

Why does `list.__iadd__` modify both original and assigned lists, while `list.__add__` only modifies the assigned list?

Verhaltensdiskrepanz zwischen list.__iadd__ und list.__add__

Bedenken Sie den folgenden Ausschnitt:

<code class="python">x = y = [1, 2, 3, 4]
x += [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4, 4]</code>

Im Gegensatz dazu , beachten Sie Folgendes:

<code class="python">x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # Outputs: [1, 2, 3, 4, 4]
print(y)  # Outputs: [1, 2, 3, 4]</code>

Warum verhalten sich diese beiden Codeschnipsel unterschiedlich?

Erklärung

Der Hauptunterschied liegt in der Verwendung von " "-Operator. Im ersten Snippet:

  • x = [4] verwendet die __iadd__-Methode der Listenklasse, die:

    • die ursprüngliche Liste (x) in verändert -place
    • Erweitert es um die Elemente aus der zweiten Liste ([4])

Dies führt dazu, dass sowohl x als auch y geändert werden, um den Wert einzuschließen 4.

Im zweiten Snippet verwendet x = x [4] jedoch die __add__-Methode:

  • x [4] erstellt eine neue Liste durch Verketten von x mit [4]
  • Die x-Variable wird dann dieser neuen Liste neu zugewiesen
  • y bleibt unverändert, da es sich um ein anderes Objekt handelt

Daher hat x den Wert [1, 2 , 3, 4, 4], während y immer noch den ursprünglichen Wert [1, 2, 3, 4] behält.

Das obige ist der detaillierte Inhalt vonWarum ändert „list.__iadd__“ sowohl die ursprüngliche als auch die zugewiesene Liste, während „list.__add__“ nur die zugewiesene Liste ändert?. 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