我发现分号“;”具有奇怪的行为。在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。
答案 0 :(得分:20)
在交互式解释器中,一次读取和评估第一条分号行。这样,解释器会识别出20000在每个赋值中都是相同的不变int
值,因此可以(不一定,但确实)使x
和y
引用相同的对象。
重要的一点是,这仅仅是交互式解释器选择进行的优化; ;
的语言或某些特殊属性并不能保证将两个语句合并为一个语句。
在下面的两个示例中,在读取和评估y=20000
时,x=20000
(带或不带分号)已经被评估和忘记了。由于20000不在预分配的int
值的范围内(-5到257),因此CPython不会尝试在内存中查找另一个20000实例。只会为y
创建一个新的。