Tal*_*Tal 0 python int literals python-2.7 python-internals
is在Python中测试2个引用是否指向同一个对象.-5到256之间的数字在内部缓存,因此:
a = 10
b = 10
a is b # Results in True
Run Code Online (Sandbox Code Playgroud)
这是如何解释的:
20000 is 20000 # Results in True
Run Code Online (Sandbox Code Playgroud)
这两个数字都高于256. 2个整数不应该是2个不同的对象吗?
Mar*_*ers 11
Python解释器看到你正在重用不可变对象,所以它不打算创建两个:
>>> import dis
>>> dis.dis(compile('20000 is 20000', '', 'exec'))
1 0 LOAD_CONST 0 (20000)
3 LOAD_CONST 0 (20000)
6 COMPARE_OP 8 (is)
9 POP_TOP
10 LOAD_CONST 1 (None)
13 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
注意两个LOAD_CONST操作码,它们都在索引0加载常量:
>>> compile('20000 is 20000', '', 'exec').co_consts
(20000, None)
Run Code Online (Sandbox Code Playgroud)
在交互式解释器中,Python仅限于编译您单独输入的每个(简单或复合)语句,因此它不能在不同语句中重用这些常量.
但是在函数对象中,它肯定只会创建一个这样的整数对象,即使您多次使用相同的int文字也是如此.这同样适用于在模块级别运行的任何代码(因此在函数或类定义之外); 这些都以相同的代码对象常量结束.
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |