Home > Backend Development > Python Tutorial > How Does Python's = Operator Behave with Lists and Their __iadd__ and __add__ Methods?

How Does Python's = Operator Behave with Lists and Their __iadd__ and __add__ Methods?

DDD
Release: 2025-01-01 04:32:09
Original
768 people have browsed it

How Does Python's  = Operator Behave with Lists and Their __iadd__ and __add__ Methods?

Assignment Operator = on Lists Unveiled

In Python, the = operator has different functionalities depending on the type of object it's applied to. When used on lists, it raises some unexpected behaviors that can be explained by understanding the underlying special methods it calls.

Generally, = tries to invoke the __iadd__ special method for in-place addition. If it's absent, it resorts to using __add__ instead.

In-place Modification with __iadd__

For lists, a mutable type, Python provides a __iadd__ method. When encountering =, Python calls __iadd__ on the list, allowing it to mutate and add an element.

New Object Creation with __add__

If a list doesn't have a __iadd__ method, Python defaults to __add__. This method creates a new list rather than modifying the original one. As a result, = behaves as if you had assigned a new list using =.

Examples and Output

Referencing the code example in the question:

class foo:
    bar = []
    def __init__(self, x):
        self.bar += [x]


class foo2:
    bar = []
    def __init__(self, x):
        self.bar = self.bar + [x]

f = foo(1)
g = foo(2)
print(f.bar)
print(g.bar)

f.bar += [3]
print(f.bar)
print(g.bar)

f.bar = f.bar + [4]
print(f.bar)
print(g.bar)

f = foo2(1)
g = foo2(2)
print(f.bar)
print(g.bar)
Copy after login

OUTPUT:

[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1]
[2]
Copy after login
  • For foo, both __iadd__ and __add__ are not defined. Hence, = creates a new list and assigns it to the bar attribute, which is shared among all instances.
  • For foo2, __add__ is defined but __iadd__ is not. Consequently, = creates a new list, assigning it to the bar attribute without modifying the shared list.

By understanding the differences between __iadd__ and __add__, you can anticipate the behavior of = on lists, preventing unexpected surprises.

The above is the detailed content of How Does Python's = Operator Behave with Lists and Their __iadd__ and __add__ Methods?. 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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template