运行:
a = 257
b = 257
print id(a) == id(b)
Run Code Online (Sandbox Code Playgroud)
结果是:
相同的陈述但相反的结果.为什么?
bak*_*kal 10
test.py解析在一起,这比在解释器中作为单独语句解析的代码更可优化当你将它放入test.py并作为一个整体运行时,字节码编译器有更好的机会分析文字的使用并优化它们.(因此你得到a并b指向同一个地方)
而不是在解释器中运行单独的语句(单独解析)时(我认为它只通过预分配优化到256而不是257)
在解释器中使用它来查看单独语句的效果:
>>> a, b = 257, 257 # or if you prefer: a = 257; b = 257
>>> print a is b
True
>>> a = 257
>>> b = 257
>>> print a is b
False
Run Code Online (Sandbox Code Playgroud)
在interperter中定义一个函数也可以改变它来分析和优化使用的文字
>>> def test():
... a = 257
... b = 257
... print a is b
...
>>> test()
True
Run Code Online (Sandbox Code Playgroud)
[-5, 256]范围内的整数)>>> def test():
... pi = 3.14
... x = 3.14
... return x is pi
...
>>> test()
True
# As opposed to separate statements:
>>> pi = 3.14
>>> x = 3.14
>>> x is pi
False
Run Code Online (Sandbox Code Playgroud)
>>> dis.dis(test)
2 0 LOAD_CONST 1 (3.14)
3 STORE_FAST 0 (pi)
3 6 LOAD_CONST 1 (3.14) <-- Same constant 1 reused
9 STORE_FAST 1 (x)
4 12 LOAD_FAST 1 (x)
15 LOAD_FAST 0 (pi)
18 COMPARE_OP 8 (is)
21 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
168 次 |
| 最近记录: |