在Python中有效存储布尔值以节省内存的最佳方法

4 投票
3 回答
5618 浏览
提问于 2025-04-16 21:20

怎么才能在一个像字典一样的集合中,以一个长数字为索引,存储从一百万到四十五万的布尔值(也就是真或假)呢?我需要尽量少占用内存。因为每个布尔值和整数都要占用超过22个字节的内存。有没有更省内存的方法来存储布尔值呢?

3 个回答

0

你有没有想过使用一种混合的列表和位串呢?

可以用列表来存储你的一维位数据。每个列表项可以保存一个固定长度的位串。你可以先用列表来找到你感兴趣的位串,然后再用这个位串来查找或修改你想要的位。

这个列表应该能让你高效地找到位串,而位串则应该尽可能地节省存储空间。混合的列表和位串可以在访问速度(访问列表中的位串会稍微慢一些)和存储效率(位数据加上列表的额外开销)之间找到一个平衡。

1

这两个主要的模块是 bitarraybitstring(我写了后者)。这两个模块都能满足你的需求,但各有优缺点:

bitarray

  • 是用C语言写的扩展,所以运行速度非常快。
  • 只支持Python 2。

bitstring

  • 纯Python编写。
  • 支持Python 2.6及以上版本和Python 3.x。
  • 提供了更多的方法来读取和解释数据。

所以,选择哪个模块取决于你想用数据做什么。如果只是存储和取回数据,那两个模块都可以用,但如果对性能要求很高,建议使用bitarray。可以看看它们的文档(bitstring, bitarray),看看你更喜欢哪个。

4

可以看看这个问题Bitarray 似乎是大家比较推荐的选择。

撰写回答