Warum ändert „x = [4]' „x', aber „x = x [4]' erstellt eine neue Liste in Python?

Susan Sarandon
Freigeben: 2024-10-30 02:09:03
Original
903 Leute haben es durchsucht

Why Does `x  = [4]` Modify `x` but `x = x   [4]` Create a New List in Python?

Unterschiedliches Verhalten: list.__iadd__ vs. list.__add__

Betrachten Sie den folgenden rätselhaften Python-Code:

x = y = [1, 2, 3, 4]
x += [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4, 4]
Nach dem Login kopieren

Vergleichen Sie es nun mit diesem Codeausschnitt:

x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4]
Nach dem Login kopieren

Was uns verblüfft, ist der große Unterschied in ihrem Verhalten. Warum ändert x = [4] die ursprüngliche Liste x, während x = x [4] zu einer neuen Liste führt?

Die Antwort liegt in den Objektmethoden von Python. list.__iadd__ mutiert die vorhandene Liste, indem die Elemente der zweiten Liste an sie angehängt werden. Umgekehrt erstellt list.__add__ eine neue Liste, die die Elemente beider Eingabelisten enthält.

Ein Ausdruck wie x = y versucht zunächst, __iadd__ aufzurufen. Wenn __iadd__ verfügbar ist, wird dieser Mutationszauber ausgeführt. Andernfalls wird standardmäßig __add__ verwendet, wodurch eine neue Liste erstellt und x zugewiesen wird. Da die Listenklasse __iadd__ definiert, ändert der erste Codeausschnitt die ursprüngliche x-Liste, während der zweite Codeausschnitt eine neue Liste erstellt und diese x zuweist, wobei y unverändert bleibt.

Das obige ist der detaillierte Inhalt vonWarum ändert „x = [4]' „x', aber „x = x [4]' erstellt eine neue Liste in Python?. 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