8
t = (1,2,3)
t1 = (1,2,3)
print(id(t))
print(id(t1))

上面的代码行在 Python 中的脚本模式下给出了相同的地址,但在交互模式下它输出不同的地址。任何人都可以解释这个原因吗?

4

1 回答 1

5

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

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

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

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

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

于 2020-06-11T15:27:03.327 回答