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

时间:2018-09-13 18:04:24

标签: 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。

1 个答案:

答案 0 :(得分:20)

在交互式解释器中,一次读取和评估第一条分号行。这样,解释器会识别出20000在每个赋值中都是相同的不变int值,因此可以(不一定,但确实)使xy引用相同的对象。

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

在下面的两个示例中,在读取和评估y=20000时,x=20000(带或不带分号)已经被评估和忘记了。由于20000不在预分配的int值的范围内(-5到257),因此CPython不会尝试在内存中查找另一个20000实例。只会为y创建一个新的。