示例1:
➜ /tmp cat t.py
a = 250000000000
b = 250000000000
print id(a), id(b), id(a) == id(b)
➜ /tmp python t.py
140450848587992 140450848587992 True #(Why is True?)
示例2:
➜ /tmp python
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 250000000000
>>> b = 250000000000
>>> print id(a), id(b), id(a) == id(b)
140443481339400 140443481339208 False #(I think it should be False)
我知道Python有一个小的整数缓存池(从-5到256),所以两个大整数应该始终有不同的id。
如何解释大整数在 Python shell 和 *.py 文件中运行时的不同行为?
如果我是读取 .py 文件的 Python 解释器(如第一个示例中所示),我只会为此数字分配一次内存,然后进行a
and b
指向这个位置。
例如,解释器读取此文件并看到两个变量被分配了相同的值,并思考:“我想通过为相同的值分配两个部分来浪费内存吗?不,我不想。相反,我最好分配一个块并将该值存储在其中”。那么,就只有one该值的副本,这就是这些变量具有相同 id 的原因。
第二种情况Pythonhas赋值的时候要分配内存,所以有两块内存有相同的数据。
综上所述,在第一种情况下,解释器对代码了解更多(给出了整个代码),因此它可以optimize它(并生成.pyo
文件),而在第二个中它根本无法进行任何优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)