Home  >  Article  >  Backend Development  >  Why Does `x = [4]` Modify `x` but `x = x [4]` Create a New List in Python?

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

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

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

Disparate Behavior: list.__iadd__ vs list.__add__

Consider the following enigmatic Python code:

x = y = [1, 2, 3, 4]
x += [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4, 4]

Now, juxtapose it with this code snippet:

x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4]

What perplexes us is the stark difference in their behavior. Why does x = [4] alter the original list x, while x = x [4] results in a new list?

The answer lies in Python's object methods. list.__iadd__ mutates the existing list by appending the elements of the second list onto it. Conversely, list.__add__ creates a new list comprising the elements of both input lists.

An expression like x = y first attempts to invoke __iadd__. If __iadd__ is available, it will execute this mutation magic. Otherwise, it will default to __add__, which creates a new list and assigns it to x. Since list class defines __iadd__, the first code snippet mutates the original x list, while the latter code snippet creates a new list and assigns it to x, leaving y unmodified.

The above is the detailed content of Why Does `x = [4]` Modify `x` but `x = x [4]` Create a New List in Python?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn