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

Susan Sarandon
Freigeben: 2024-10-30 17:05:25
Original
601 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage