答案 0 :(得分: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
在interperter中定义一个函数还可以对其进行更改以分析和优化使用的文字
>>> def test():
... a = 257
... b = 257
... print a is b
...
>>> test()
True
[-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
>>> 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