尽管元组是不可变的,但它们以交互方式存储在不同的地址中。为什么?

问题描述 投票:3回答:1
t = (1,2,3)
t1 = (1,2,3)
print(id(t))
print(id(t1))

以上代码行在Python的脚本模式下提供了相同的地址,但是在交互模式下,它输出了不同的地址。谁能解释这个原因?

python tuples cpython object-identity
1个回答
3
投票

编译脚本时,编译器可以搜索所有等效的元组,并生成代码以对所有元组使用相同的引用。

但是在交互模式下,它需要保留所有元组的缓存,以便它可以搜索先前的等效元组并返回对其的引用,而不是每次都创建一个新的元组。交互式解释器不执行此操作。

如果在同一行上分配两个变量,则实际上会得到相同的元组。

t = (1, 2, 3); t1 = (1, 2, 3)

这大概是因为它正在为每个输入运行编译器,因此它可以进行完整的分析和优化。

© www.soinside.com 2019 - 2024. All rights reserved.