t = (1,2,3)
t1 = (1,2,3)
print(id(t))
print(id(t1))
以上代码行在Python的脚本模式下提供了相同的地址,但是在交互模式下,它输出了不同的地址。谁能解释这个原因?
编译脚本时,编译器可以搜索所有等效的元组,并生成代码以对所有元组使用相同的引用。
但是在交互模式下,它需要保留所有元组的缓存,以便它可以搜索先前的等效元组并返回对其的引用,而不是每次都创建一个新的元组。交互式解释器不执行此操作。
如果在同一行上分配两个变量,则实际上会得到相同的元组。
t = (1, 2, 3); t1 = (1, 2, 3)
这大概是因为它正在为每个输入运行编译器,因此它可以进行完整的分析和优化。