hek*_*ran 15 python immutability
有人可以解释为什么带有整数的示例会导致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
Run Code Online (Sandbox Code Playgroud)
因为整数是不可变的,而列表是可变的.您可以从语法中看到.在x = x + 1你实际上是为了分配一个新值x(它在LHS上是唯一的).在x[0] = 4,你在列表上调用索引运算符并给它一个参数 - 它实际上相当于x.__setitem__(0, 4),这显然改变了原始对象,而不是创建一个新对象.