为什么 python 列表 L += x 的行为与 L = L + x 不同?

Ran*_*ku' 3 python list operators

ls = [1,2,3]
id(ls)
output: 4448249184  # (a)

ls += [4]
id(ls)
output: 4448249184  # (b)

ls = ls + [4]
id(ls)
output: 4448208584   # (c)
Run Code Online (Sandbox Code Playgroud)

为什么(a)和(b)相同,而(b)和(c)不同?

L += x一样L = L + x吗?

fre*_*ini 5

使用+=,您正在修改 plac 中的列表,就像您使用附加xL(例如.append.extend...)的类方法时一样。这就是__iadd__方法。

调用这些方法来实现增广算术赋值(+=、-=、*=、/=、//=、%=、**=、<<=、>>=、&=、^=、|= )。这些方法应该尝试就地执行操作(修改 self)并返回结果(可以是但不一定是 self)。

使用L = L + x,您正在创建一个新列表 ( L+x),您正在影响一个变量(在本例中为 L)。

另请参阅list__iadd__和的不同行为__add__