Python根据底层系统架构自动分配整数。不幸的是,我有一个庞大的数据集需要完全加载到内存中。
那么,有没有办法强制Python只使用2个字节的某些整数(相当于C ++'short')?
发布于 2018-09-04 12:57:24
感谢Armin指出'阵列'模块。我还发现'struct'模块在一个字符串中打包c样式的结构:
从文档(https://docs.python.org/library/struct.html):
>>> from struct import *
>>> pack('hhl', 1, 2, 3)
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('hhl')
8
发布于 2018-09-04 14:20:05
Armin对阵列模块的建议可能是最好的。两种可能的选择:
同样值得认识到Python整数对象不是4个字节 - 还有额外的开销。因此,如果您有非常多的短路,那么通过某种方式使用C short(例如阵列模块),每个数字可以节省两个以上的字节数。
我不得不在内存中保留一大组整数,并且整数键和值的字典太大(我有1GB可用于数据结构IIRC)。我转而使用IIBTree(来自ZODB)并设法适应它。(IIBTree中的int是真正的C int,而不是Python整数,当数量大于32位时,我自动切换到IOBTree)。
https://stackoverflow.com/questions/-100000727
复制相似问题