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

本文探讨了Python3中整数的内存表示方式,包括小整数与大整数的区别及其在不同位数Python中的表现形式,并解释了sys.getsizeof()函数返回值背后的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面在书上看到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/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值