首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的短整数

Python中的短整数
EN

Stack Overflow用户
提问于 2018-09-04 04:49:16
回答 2查看 0关注 0票数 0

Python根据底层系统架构自动分配整数。不幸的是,我有一个庞大的数据集需要完全加载到内存中。

那么,有没有办法强制Python只使用2个字节的某些整数(相当于C ++'short')?

EN

回答 2

Stack Overflow用户

发布于 2018-09-04 12:57:24

感谢Armin指出'阵列'模块。我还发现'struct'模块在一个字符串中打包c样式的结构:

从文档(https://docs.python.org/library/struct.html):

代码语言:javascript
复制
>>> 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
票数 0
EN

Stack Overflow用户

发布于 2018-09-04 14:20:05

Armin对阵列模块的建议可能是最好的。两种可能的选择:

  • 您可以自己创建一个扩展模块,提供您所追求的数据结构。如果它真的只是一组短裤,那么这很简单。
  • 你可以欺骗和操纵位,这样你就可以在Python int的下半部分存储一个数字,在上半部分存储另一个数字。您可以编写一些实用程序函数来转换为数据结构中的这些函数。丑陋,但它可以使工作。

同样值得认识到Python整数对象不是4个字节 - 还有额外的开销。因此,如果您有非常多的短路,那么通过某种方式使用C short(例如阵列模块),每个数字可以节省两个以上的字节数。

我不得不在内存中保留一大组整数,并且整数键和值的字典太大(我有1GB可用于数据结构IIRC)。我转而使用IIBTree(来自ZODB)并设法适应它。(IIBTree中的int是真正的C int,而不是Python整数,当数量大于32位时,我自动切换到IOBTree)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档