简短的答案是因为列表是 ,整数是 。
您无法在适当的位置对整数进行突变,因此我们将其称为“不可变”。考虑到这一点,诸如在整数上加法之类的操作不会修改原始对象,而是返回一个新值- 因此您的原始变量将保持不变。因此,如果我们存储对整数的引用,则只要我们不更改它们之一,它们就只会是同一对象:
>>> foo = 1
>>> bar = foo
>>> foo is bar
True
>>> foo += 2
3
>>> foo
3
>>> bar
1
>>> foo is bar
False
在另一方面列表是“可变的”(可以修改相同的对象基准),和类似的操作pop()
发生变异的list
就地,改变原。这也意味着,如果您编辑对诸如的可变对象的引用list
,原始对象也将被更改:
>>> baz = [1, 2, 3, 4, 5]
>>> qux = baz
>>> qux is baz
True
>>> baz.pop()
5
>>> qux
[1, 2, 3, 4]
>>> baz
[1, 2, 3, 4]
>>> qux is baz
True