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

标签 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 值,因此可以(它不必,但确实)使 xy 引用同一对象。

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

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

关于python - 为什么在 Python 中添加分号会改变结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52319436/

相关文章:

python - 在两个Python模块之间传递C函数指针

python - 如何在 Tkinter 中使用 curselection 表示没有选择任何内容

python - 从 csv 中检索数据,并将 x 行和 y 列的值分配给变量。 Py3.2,*作业*

python - 如何在 Airflow 中将参数传递给 PythonOperator

python - 如何在scrapy中给出每个请求之间的延迟?

python - 如何使 matplotlib 显示超出图形的图例?

python - Django Compressor 编译 SASS 时出错(--scss 无效选项)

python - 在 Flask 中,如何在单击按钮时生成动态 URL?

python - Django - 将值从模板传递到 View 函数

python - 在 Python 中使用列表方法加速 for 循环