Python中高效内存的变量类型

2024-04-25 09:47:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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个子节点,顺序正确。 例如dict:

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,有1000个节点。有没有办法节省内存?你知道吗


Tags: 记忆内存程序nonenode字节bytes节点
1条回答
网友
1楼 · 发布于 2024-04-25 09:47:23

第二个问题是指针的问题,委托给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字节的值,然后在数组中存储例如2字节的值,那么在python中就不会有内存效率。你知道吗

相关问题 更多 >