首页 > 解决方案 > 为什么在 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

为什么第一个测试返回“True”,而其他测试返回“False”?我的 Python 版本是 3.6.5。

标签: python

解决方案


在交互式解释器中,第一个分号行被一次性读取和评估。因此,解释器认识到 20000int在每个赋值中都是相同的不可变值,因此可以(它不必,但确实)生成xy引用同一个对象。

重要的一点是,这只是交互式解释器选择进行的优化;;将两个语句合二为一的语言或某些特殊属性并不能保证这一点。

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


推荐阅读