加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用bitarray而不是int来节省dict的内存?

发布时间:2020-12-16 21:31:23 所属栏目:Python 来源:网络整理
导读:我试图减少 python dict的内存消耗,在我的例子中,它作为一个单词 – document_id“倒排索引”.每个字都被整数散列,占用24个字节. 我想知道我是否可以将dict值中的每个元素和dict中的每个键转换为bitarray.我注意到任何遇到的int的最大值都小于2 ^ 22,所以我
我试图减少 python dict的内存消耗,在我的例子中,它作为一个单词 – > document_id“倒排索引”.每个字都被整数散列,占用24个字节.

我想知道我是否可以将dict值中的每个元素和dict中的每个键转换为bitarray.我注意到任何遇到的int的最大值都小于2 ^ 22,所以我可以只分配一个“22号”的位数组.

如何才能做到这一点?到目前为止,我已经看到了gmpy2bitarray库,以及C stdlib中的std::bitset,我可以使用Cython.我从post读到,bitarray并不像gmpy那么快.在gmpy,我不知道如何设置大小.最后,我想知道Python中的gmpy或bitarray对象的内存开销是否值得,当我可以使用std :: bitset时,它可能使用最少的内存.

解决方法

>>> sys.getsizeof(1)
24

在我的机器上,这只是一个整数的24个字节.对于Python对象,对象开销会淹没这些小值的所有其他成本.即使你可以削减10位(你不能这样做;内存分配不能这样工作),它的花生与refcount,类型指针和dict条目本身(不包含在那里)相比数字),甚至在你得到实际数据之前.

bitarray无济于事;它可能比int大.我不知道std :: bitset,因为我不确定Cython增加了什么开销,但它会有比特数这样的开销.如果有的话,我希望Cython int能够发挥最佳效果,但它可能需要转换为常规Python int才能进入dict.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读