【发布时间】:2014-10-17 06:58:50
【问题描述】:
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不一样吗?
【问题讨论】:
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不一样吗?
【问题讨论】:
使用+=,您正在修改plac 中的列表,例如当您使用将x 附加到L 的类方法时(例如.append、.extend...)。这是__iadd__ 方法。
调用这些方法来实现增强的算术赋值(+=、-=、*=、/=、//=、%=、**=、>=、&=、^= , |=)。这些方法应该尝试就地执行操作(修改 self)并返回结果(可以是但不一定是 self)。
使用 L = L + x,您正在创建一个新列表 (L+x),您正在影响一个变量(在本例中为 L)。
【讨论】:
List 情况下的增强赋值是不同的。 它不是像整数那样的实际赋值,所以
a += b
等于
a = a+b
而在 List 的情况下,它的操作如下:
list += x
是:
list.extends(x)
【讨论】: