Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen „list.__iadd__“ und „list.__add__“ und warum führt er zu unterschiedlichen Ergebnissen beim Ändern von Listen in Python?

Was ist der Unterschied zwischen „list.__iadd__“ und „list.__add__“ und warum führt er zu unterschiedlichen Ergebnissen beim Ändern von Listen in Python?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 08:55:02586Durchsuche

What is the difference between `list.__iadd__` and `list.__add__` and why does it lead to different results when modifying lists in Python?

Die Unterschiede zwischen list.__iadd__ und list.__add__ verstehen

In Python können Objekte spezielle „magische“ Methoden definieren, um ihre Interaktion zu unterstützen mit bestimmten Betreibern. Zwei dieser Methoden sind iadd und __add__, die für direkte bzw. reguläre Additionsvorgänge verwendet werden.

Bedenken Sie die folgenden zwei Codeausschnitte:

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

# Example 2
x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4]</code>

Warum? Verhalten sich diese beiden Beispiele unterschiedlich?

In beiden Fällen beginnen wir mit zwei identischen Listen, x und y, und führen eine Additionsoperation mit entweder x = [4] oder x = x [4] durch.

Bei Verwendung von x = [4] wird die __iadd__-Methode von Python aufgerufen, die eine In-Place-Addition durchführt. Dies bedeutet, dass die ursprüngliche Liste x verändert wird und ihr Inhalt mit den Elementen in der Liste aktualisiert wird [4]. Infolgedessen enthalten sowohl x als auch y jetzt dieselbe geänderte Liste.

Im Gegensatz dazu wird bei Verwendung von x = x [4] die __add__-Methode von Python aufgerufen, die eine neue Liste zurückgibt, die die Elemente von beiden x enthält und [4]. Die ursprüngliche Liste x bleibt unverändert und y verweist weiterhin auf die ursprüngliche unveränderte Liste.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „list.__iadd__“ und „list.__add__“ und warum führt er zu unterschiedlichen Ergebnissen beim Ändern von Listen 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