首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在运行python代码时,在Sublime文本和终端中获得不同的结果?

在运行python代码时,在Sublime文本和终端中获得不同的结果?
EN

Stack Overflow用户
提问于 2014-10-12 01:55:33
回答 1查看 142关注 0票数 0

我正在学习Core并做一个练习:

4-9。鉴于下列任务: A= 10 B= 10 C= 100 D= 100 E= 10.0 F= 10.0以下每一项的输出是什么?为什么? A是b C是d E为f

当我用崇高的文本2,按下cmd +B来构建它时,我得到了所有的真理。

代码语言:javascript
运行
复制
a = 10
b = 10
c = 100
d = 100
e = 10.0
f = 10.0
print a is b
print c is d
print e is f

Output:  
True
True
True
[Finished in 0.0s]

但当我在终点站做这件事时,我得到:

代码语言:javascript
运行
复制
Output:  
True
True
False # It's what I expect

为什么结果是不同的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-12 02:08:17

我将假设您已经知道为什么重用abcd中的整数值(它们是interned like all small integers)。

Python编译器将不变的文字(如浮点数)存储为字节码的常量。如果在一行中多次使用相同的文字,则重复使用相同的常量。这意味着ef都分配了相同的字节码常量;对两者都使用相同的float对象,而e is f是True:

代码语言:javascript
运行
复制
>>> import dis
>>> assignment = compile('''\
... e = 10.0
... f = 10.0
... ''', '<stdin>', 'exec')
>>> dis.dis(assignment)
  1           0 LOAD_CONST               0 (10.0)
              3 STORE_NAME               0 (e)

  2           6 LOAD_CONST               0 (10.0)
              9 STORE_NAME               1 (f)
             12 LOAD_CONST               1 (None)
             15 RETURN_VALUE        
>>> assignment.co_consts
(10.0, None)

注意两个LOAD_CONST指令如何使用相同的索引(0)加载浮点对象;常数结构只包含一个float对象。

但是,Python交互式会话分别编译每个语句;字节码编译器没有机会重用常量,而是存储两个不同的对象。编译f = 10.0时,e = 10.0已经编译并执行了,该分配的代码对象已经消失。

这就是为什么您看到了在一次运行脚本(就像崇高文本构建命令所做的那样)和将代码粘贴到Python交互式会话之间的区别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26321093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档