0

我一直在阅读 Python 数据模型。以下文本取自此处

类型几乎影响对象行为的所有方面。甚至对象标识的重要性也在某种意义上受到影响:对于不可变类型,计算新值的操作实际上可能返回对具有相同类型和值的任何现有对象的引用,而对于可变对象,这是不允许的。例如, aftera = 1; b = 1a 可能b会或可能不会引用具有值 1 的同一对象,具体取决于实现,但 after和c = []; d = []保证会引用两个不同的、唯一的、新创建的空列表。(请注意,将相同的对象分配给和。)cdc = d = []cd

因此,它提到,对于不可变类型,计算新值的操作实际上可能返回对具有相同类型和值的现有对象的引用。所以,我想测试一下。以下是我的代码:

a = (1,2,3)
b = (1,2)
c = (3,)
k = b + c
print(id(a))
>>> 2169349869720    
print(id(k))
>>> 2169342802424

在这里,我做了一个操作来计算一个新的元组,它的值和类型与a. 但是我得到了一个引用不同 ID 的对象。这意味着我得到了一个引用不同内存的对象。为什么是这样?

4

1 回答 1

0

根据@jonrsharpe 的评论回答问题

注意“可能实际返回” - 不能保证,对于 Python 来说,查看现有元组以找出与您的操作创建的元组相同的元组是否已经存在并重用它而不是仅创建元组,效率可能会降低一个新的。

于 2021-09-21T01:23:17.417 回答