我用分号"发现了奇怪的行为"; 在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
在每个赋值中是相同的不可变值,因此可以(它不必,但确实)对同一对象进行x
和y
引用.
重要的是,这只是交互式口译员选择的优化; 它不是由语言或某些特殊属性保证的东西,;
它将两个语句合二为一.
在以下两个示例中,在y=20000
读取和评估时,x=20000
(有或没有分号)已经被评估和遗忘.由于20000不在预分配int
值的范围(-5到257)内,CPython不会尝试在内存中找到另一个20000的实例; 它只是创造了一个新的y
.
归档时间: |
|
查看次数: |
613 次 |
最近记录: |