Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ändert „x = [4]“ „x“, aber „x = x [4]“ erstellt eine neue Liste in Python?

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

Susan Sarandon
Susan SarandonOriginal
2024-10-30 02:09:03823Durchsuche

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]

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]

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!

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