有人可以解释为什么整数示例导致x和y的值不同,而列表示例导致x和y是同一对象的原因吗?
x = 42 y = x x = x + 1 print x # 43 print y # 42 x = [ 1, 2, 3 ] y = x x[0] = 4 print x # [4, 2, 3] print y # [4, 2, 3] x is y # True
因为整数是不可变的,而list是可变的。您可以从语法中看到。在x = x + 1你实际上是分配一个新值x(管它是在LHS)。在中x[0] = 4,您要在列表上调用index运算符并为其指定一个参数-它实际上等效于x.__setitem__(0, 4),这显然会更改原始对象,而不创建新对象。
x = x + 1
x
x[0] = 4
x.__setitem__(0, 4)