<分区>
我发现分号“;”有一个奇怪的行为在 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
<分区>
我发现分号“;”有一个奇怪的行为在 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。
最佳答案
在交互式解释器中,第一个分号行被一次性读取和评估。因此,解释器认识到 20000 在每个赋值中都是相同的不可变 int
值,因此可以(它不必,但确实)使 x
和 y
引用同一对象。
重要的一点是,这只是交互式解释器选择进行的优化;它不是由语言或 的某些特殊属性保证的;
将两个语句合二为一。
在以下两个示例中,在读取和评估 y=20000
时,已经评估了 x=20000
(带或不带分号)并被遗忘。由于 20000 不在预分配的 int
值范围内(-5 到 257),CPython 不会尝试在内存中找到另一个 20000 的实例;它只是为 y
创建一个新的。
关于python - 为什么在 Python 中添加分号会改变结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52319436/
相关文章:
python - 如何在 Tkinter 中使用 curselection 表示没有选择任何内容
python - 从 csv 中检索数据,并将 x 行和 y 列的值分配给变量。 Py3.2,*作业*
python - 如何在 Airflow 中将参数传递给 PythonOperator
python - 如何在scrapy中给出每个请求之间的延迟?
python - 如何使 matplotlib 显示超出图形的图例?
python - Django Compressor 编译 SASS 时出错(--scss 无效选项)
python - 在 Flask 中,如何在单击按钮时生成动态 URL?