gpt4 book ai didi

python - Python 中的内存高效变量类型

转载 作者:行者123 更新时间:2023-11-28 18:35:09 25 4
gpt4 key购买 nike

我是 python 的新手,我有两个关于内存的问题。

首先:

我可以为每个变量精确存储 2 位,还是可以使用比 int 更少的内存?我的程序仅适用于值 0、1、2、3,我想节省内存。

getsizeof(1)   //12 bytes
getsizeof('A') //22 bytes, but I expected 2 bytes as char :(

由于有 2 位,每个变量需要 12 或 22 个字节。有可能在 pyhton 中解决这个问题吗?

第二个类似的问题:

我尝试实现树数据结构,其中每个节点按正确顺序有 4 个子节点。例如理想的字典:

node = {1: None, 2: None, 3: None, 4: None}
getsizeof(node) //57 bytes

或在数组中:

node = [None, None, None, None]
getsizeof(node) //52 bytes, where getsizeof([]) = 36 bytes

事实上,每个节点将包含 36 个无用的字节。它是 ~3.35Gb,有 1 000 000 000 个节点。有什么办法可以节省内存吗?

最佳答案

第二个问题是指针的问题,委托(delegate)给 C 或其他语言不是解决方案,因为指针总是占用 8 或 4 个字节(取决于体系结构)。此外,我假设使用 64b python 处理数十 GB,因此几乎每个变量类型都会大 ~2 倍。

例如:

node = [None, None, None, None]
node = [[[None, None, None, None], None, None, None], None, None, None]

每个“None”都可能引用另一个节点(指针),因此无法通过这种方式进行优化。如果您确定叶子的数量将是例如小于 ~65K,那么你可以减少(~4 倍)并根据你的需要修改 64b 架构上的指针大小。

第一个问题的问题类似(指针总是占用必要的空间),解决方案是使用位数组或使用位操作并尝试在一个变量中存储更多值。但是,如果有必要在某些结构中准确存储例如 2 个字节的值,然后例如在数组中,它不会在 python 中节省内存。

关于python - Python 中的内存高效变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33248490/

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