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。
解决方案
在交互式解释器中,第一个分号行被一次性读取和评估。因此,解释器认识到 20000int
在每个赋值中都是相同的不可变值,因此可以(它不必,但确实)生成x
和y
引用同一个对象。
重要的一点是,这只是交互式解释器选择进行的优化;;
将两个语句合二为一的语言或某些特殊属性并不能保证这一点。
在下面的两个例子中,到y=20000
被读取和评估的时候,x=20000
(有或没有分号)已经被评估和遗忘了。由于 20000 不在预分配int
值的范围(-5 到 257)内,CPython 不会尝试在内存中找到另一个 20000 实例;它只是为y
.
推荐阅读
- python - How to remove ' ' in a list in python?
- ansible - Ansible - using json imported from Consul
- javascript - How to pass props to child components when using protected routes?
- qt - "Object is not defined" in TabView
- python - Calculate new column in pandas based on certain criteria
- github - 在“推送”、预接收钩子或网络钩子上,GitHub 中首先触发的是什么?
- go - Go 允许算术运算溢出而不是抛出异常是预期的行为吗?
- c# - LINQ 查询将两个表连接在一起以返回错误的值
- acumatica - Import of client scenarios
- r - 错误:找不到所需的包 curl。请运行: install.packages('curl') Travis CI 上的执行停止