我一直在阅读 Python 数据模型。以下文本取自此处:
类型几乎影响对象行为的所有方面。甚至对象标识的重要性也在某种意义上受到影响:对于不可变类型,计算新值的操作实际上可能返回对具有相同类型和值的任何现有对象的引用,而对于可变对象,这是不允许的。例如, after
a = 1; b = 1
和a
可能b
会或可能不会引用具有值 1 的同一对象,具体取决于实现,但 after和c = []; d = []
保证会引用两个不同的、唯一的、新创建的空列表。(请注意,将相同的对象分配给和。)c
d
c = d = []
c
d
因此,它提到,对于不可变类型,计算新值的操作实际上可能返回对具有相同类型和值的现有对象的引用。所以,我想测试一下。以下是我的代码:
a = (1,2,3)
b = (1,2)
c = (3,)
k = b + c
print(id(a))
>>> 2169349869720
print(id(k))
>>> 2169342802424
在这里,我做了一个操作来计算一个新的元组,它的值和类型与a
. 但是我得到了一个引用不同 ID 的对象。这意味着我得到了一个引用不同内存的对象。为什么是这样?