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

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

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

ls = ls + [4]
id(ls)
output: 4448208584   # (c)

为什么(a)和(b)是一样的,但是(b)和(c)不同?
难道L += x不就等于L = L + x吗?
2个回答

5
使用 +=,你正在原地修改列表,就像使用一个类方法将x添加到L中一样(例如.append.extend等)。这是 __iadd__ 方法。

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

使用 L = L + x,你正在创建一个新列表(L+x),然后将其赋给一个变量(在本例中为L)。
另请参见列表__iadd____add__的不同行为

1
在列表中,增强赋值是不同的。它不像整数那样是实际赋值。
a += b

等于

a = a+b

在列表的情况下,它的操作方式如下:
list += x

是:

list.extends(x)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接