Python整数占用字节的异常现象(非4或8字节),sys.getsizeof(),sys.maxsize,sys.int_info

来源:互联网 发布:linux 存放.rpm的目录 编辑:程序博客网 时间:2024/05/16 09:18

前面在书上看到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 sysimport mathprint(sys.maxsize)#结果为2147483647print(math.log(sys.maxsize, 2))#结果大致为31.0print(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/