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

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

概述我试图减少 python dict的内存消耗,在我的例子中,它作为一个单词 – > document_id“倒排索引”.每个字都被整数散列,占用24个字节. 我想知道我是否可以将dict值中的每个元素和dict中的每个键转换为bitarray.我注意到任何遇到的int的最大值都小于2 ^ 22,所以我可以只分配一个“22号”的位数组. 如何才能做到这一点?到目前为止,我已经看到了gmpy2和bit 我试图减少 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.

总结

以上是内存溢出为你收集整理的python – 使用bitarray而不是int来节省dict的内存?全部内容,希望文章能够帮你解决python – 使用bitarray而不是int来节省dict的内存?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1204975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存