是否可以将Python int存储在12个字节以内?
有没有可能让Python使用少于12个字节的int是否可以将Python int存储在12个字节以内?,python,int,Python,Int,有没有可能让Python使用少于12个字节的int >>> x=int() >>> x 0 >>> sys.getsizeof(x) 12 我不是计算机专家,但12字节不是太多了吗 我要存储的最小整数是0,最大整数是147097614,所以我实际上不需要超过4个字节 (这里可能有点我误解了,因为我在网上找不到答案。记住这一点。)在python中,ints是与其他对象一样的对象。因此,有一点额外的开销只是与您正在使用一个具有一些相关元数据的对
>>> x=int()
>>> x
0
>>> sys.getsizeof(x)
12
我不是计算机专家,但12字节不是太多了吗
我要存储的最小整数是0,最大整数是147097614,所以我实际上不需要超过4个字节
(这里可能有点我误解了,因为我在网上找不到答案。记住这一点。)在python中,
int
s是与其他对象一样的对象。因此,有一点额外的开销只是与您正在使用一个具有一些相关元数据的对象这一事实相关
如果要使用大量int,并且将它们以类似数组的结构进行布局是有意义的,那么应该查看numpy
。Numpyndarray
对于数组对象跟踪的各种元数据,对象将有一些与之相关的开销,但实际数据存储为您指定的数据类型(例如,对于4字节整数,Numpy.int32
)
因此,如果您有:
import numpy as np
a = np.zeros(5000,dtype=np.int32)
数组占用的内存仅略多于
4*5000=20000
字节整数对象的大小包括维护其他对象信息及其值的开销。附加信息可以包括对象类型、引用计数和其他特定于实现的详细信息
如果存储许多整数并希望优化所用空间,请使用,特别是使用
数组构造的数组。python中的数组('i')
整数是对象,因此存储时会产生额外的开销
你可以阅读更多关于它的信息
cpython中的整数类型存储在如下结构中:
typedef struct {
PyObject_HEAD
long ob_ival;
} PyIntObject;
PyObject\u HEAD
是一个宏,可展开为引用计数和指向类型对象的指针
所以你可以看到:
-4个字节代表一个长字节long ob\u ival
-我假设这里的大小是4个字节Py\u ssize\u t ob\u refcnt
-是一个指针,因此需要另外4个字节PyTypeObject*ob_type
总共12个字节 看,谢谢。这里有有趣的信息,但幸运的是没有重复,AFAICS。如果您认为12字节过多,请等待,直到您在64位体系结构上尝试它,其中需要24字节!一个好答案;请注意,不必依赖numpy来高效地存储大量整数。
阵列
模块提供了一种轻量级(但功能性较差)替代方案,可在标准库中找到。