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

时间:2014-10-17 06:58:51

标签: 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)

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

L += xL = L + x不相同吗?

2 个答案:

答案 0 :(得分:4)

使用+=,您正在修改plac中的列表,例如当您使用将x追加到L的类方法时(例如.append.extend } ...)。这是__iadd__方法。

  

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

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

另见different behaviour for list __iadd__ and __add__

答案 1 :(得分:1)

列表情况下的增强分配是不同的。 它不是像整数那样的实际赋值,所以

a += b

等于

a = a+b

而在List的情况下,它的运作方式如下:

list += x

是:

list.extends(x)