从 -5 到 256 的小整数被缓存在 python 中,即它们id()
总是相同的。
从文档:
当前的实现为 -5 到 256 之间的所有整数保留一个整数对象数组,当您在该范围内创建一个 int 时,您实际上只是取回了对现有对象的引用。
>>> x = 1
>>> y = 1 #same id() here as integer 1 is cached by python.
>>> x is y
True
更新:
如果两个标识符返回相同的id()值,则并不意味着它们可以充当彼此的别名,这完全取决于它们指向的对象的类型。
对于不可变对象,您不能在 python 中创建别名。修改对不可变对象的引用之一将使其指向新对象,而对旧对象的其他引用仍将保持不变。
>>> x = y = 300
>>> x is y # x and y point to the same object
True
>>> x += 1 # modify x
>>> x # x now points to a different object
301
>>> y #y still points to the old object
300
可以从它的任何引用修改可变对象,但这些修改必须是就地修改。
>>> x = y = []
>>> x is y
True
>>> x.append(1) # list.extend is an in-place operation
>>> y.append(2) # in-place operation
>>> x
[1, 2]
>>> y #works fine so far
[1, 2]
>>> x = x + [1] #not an in-place operation
>>> x
[1, 2, 1] #assigns a new object to x
>>> y #y still points to the same old object
[1, 2]