前面在书上看到Python3有大整数小整数之分,小整数即小于sys.maxsize
(在Python2用sys.maxint
表示)的整数,大整数即大于sys.maxsize
的整数。
小整数用4或8个字节表示,32位Python用4个字节,64位Python用8个字节表示。
大整数每个数字用15bit或30bit表示,即2字节或4字节表示。大整数没有4或8个字节的总长度限制,理论上可以无限大。
我的机器装的32位Python,小整数最大值为sys.maxsize,值大致为32位二进制,也就是4个字节的值范围。但是,诡异的是用sys.getsizeof()来查看占用字节数的时候,结果让人很懵逼,说好的4呢,怎么是12……
import sys
import math
print(sys.maxsize)
#结果为2147483647
print(math.log(sys.maxsize, 2))
#结果大致为31.0
print(sys.getsizeof(int()))
#结果为12
通过在stackoverflow的一番研究,原来Python在整数中还加有其他附加信息,具体每个人机器上的值一样不一样,填天知道,还学会了一个词YMMV(Your Mileage May Vary),直译就是因人而异,说白了就是人品问题!
有兴趣的可以参考
https://stackoverflow.com/questions/10365624/sys-getsizeofint-returns-an-unreasonably-large-value#
http://www.laurentluce.com/posts/python-integer-objects-implementation/