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
吗?+=
,你正在原地修改列表,就像使用一个类方法将x
添加到L
中一样(例如.append
,.extend
等)。这是 __iadd__
方法。
使用调用这些方法来实现增强的算术赋值(+=、-=、*=、/=、//=、%=、**=、<<=、>>=、&=、^=、|=)。这些方法应该尝试原地执行操作(修改self)并返回结果(可以是self,也可以不是)。
L = L + x
,你正在创建一个新列表(L+x
),然后将其赋给一个变量(在本例中为L
)。__iadd__
和__add__
的不同行为。a += b
等于
a = a+b
list += x
是:
list.extends(x)