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

Susan Sarandon
Release: 2024-10-30 02:09:03
Original
902 people have browsed it

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]
Copy after login

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]
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template