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
不相同吗?
答案 0 :(得分:4)
使用+=
,您正在修改plac中的列表,例如当您使用将x
追加到L
的类方法时(例如.append
,.extend
} ...)。这是__iadd__
方法。
调用这些方法来实现增强算术赋值(+ =, - =,* =,/ =,// =,%=,** =,<< =,>> =& ; =,^ =,| =)。这些方法应该尝试就地执行操作(修改self)并返回结果(可能是,但不一定是自己)。
使用L = L + x
,您正在创建一个新变量列表(L+x
),您要对变量进行影响(在本例中为L
)。
答案 1 :(得分:1)
列表情况下的增强分配是不同的。 它不是像整数那样的实际赋值,所以
a += b
等于
a = a+b
而在List的情况下,它的运作方式如下:
list += x
是:
list.extends(x)