为什么在Python中添加分号会改变结果?

lon*_* ma 16 python

我用分号"发现了奇怪的行为"; 在Python中.

>>> x=20000;y=20000
>>> x is y
True
>>> x=20000
>>> y=20000
>>> x is y
False
>>> x=20000;
>>> y=20000
>>> x is y
False
Run Code Online (Sandbox Code Playgroud)

为什么第一次测试返回"True",其他测试返回"False"?我的Python版本是3.6.5.

che*_*ner 20

在交互式解释器中,首先读取并评估第一个分号线.因此,解释器识别出20000 int在每个赋值中是相同的不可变值,因此可以(它不必,但确实)对同一对象进行xy引用.

重要的是,这只是交互式口译员选择的优化; 它不是由语言或某些特殊属性保证的东西,;它将两个语句合二为一.

在以下两个示例中,在y=20000读取和评估时,x=20000(有或没有分号)已经被评估和遗忘.由于20000不在预分配int值的范围(-5到257)内,CPython不会尝试在内存中找到另一个20000的实例; 它只是创造了一个新的y.