gpt4 book ai didi

python - 通过使用位数组而不是 int 来节省 dict 的内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:40 26 4
gpt4 key购买 nike

我正在尝试减少 python dict 的内存消耗,在我的例子中,它用作 word-->document_id“倒排索引”。每个 word 被散列为一个整数,占用 24 个字节。

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

如何做到这一点?到目前为止,我已经看到了 gmpy2bitarray 库,以及 C++ stdlib 中的 std::bitset,我可以将其与 Cython 一起使用。我从这个 post 中了解到,bitarray 不如 gmpy 快。在 gmpy 中,我不确定如何设置大小。最后,我想知道 Python 中 gmpybitarray 对象的内存开销是否值得,当我可以只使用 std::bitset ,这可能使用的内存最少。

最佳答案

>>> sys.getsizeof(1)
24

那是 24 字节,在我的机器上只是一个整数。对于 Python 对象,对象开销将淹没如此小的值的所有其他成本。即使你可以削减 10 位(你不能;内存分配不能那样工作),与引用计数、类型指针和字典条目本身(不包括在 24 位中)相比,它是花生数字),甚至在您获得实际数据之前。

bitarray 没有帮助;它可能比 int 大。我不知道 std::bitset,因为我不确定 Cython 给它增加了什么开销,但它会产生诸如位计数之类的开销。如果有的话,我希望 Cython int 工作得最好,但它可能需要转换为常规 Python int 才能进入 dict。

关于python - 通过使用位数组而不是 int 来节省 dict 的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21868482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com