栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么int在Python中需要三倍的内存?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么int在Python中需要三倍的内存?

请记住,Python

int
类型没有C那样有限的范围
int
。唯一的限制是可用内存。

内存用于存储值,整数存储的当前大小(存储大小可变以支持任意大小)以及标准的Python对象簿记(对相关对象的引用和引用计数)。

您可以查找

longintrepr.h
源代码(Python
3类型在Python
2中
int
传统上称为
long
类型)。它有效地利用了
PyVarObject
C类型来跟踪整数大小:

struct _longobject {        PyObject_VAR_HEAD        digit ob_digit[1];};

ob_digit
数组存储“数字”宽15个或30比特的(取决于你的平台上); 因此在我的64位OS X系统上,最大(2 ^
30)-1的整数使用1个“数字”:

>>> sys.getsizeof((1 << 30) - 1)28

但是如果您在数字中使用2个30位数字,则需要额外的4个字节,依此类推:

>>> sys.getsizeof(1 << 30)32>>> sys.getsizeof(1 << 60)36>>> sys.getsizeof(1 << 90)40

然后,基数为24的字节是

PyObject_VAR_HEAD
结构,其中包含对象大小,引用计数和类型指针(在我的64位OS X平台上为每个8字节/
64位)。

在Python 2上,整数<=

sys.maxint
但> =
-sys.maxint -1
使用仅存储单个值的简单结构存储:

typedef struct {    PyObject_HEAD    long ob_ival;} PyIntObject;

因为它使用

PyObject
而不是结构中
PyVarObject
没有
ob_size
字段,并且内存大小限制为仅24个字节;8表示
long
值,8表示引用计数,8表示类型对象指针。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610705.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号