[英]Can I use less memory to save one-digit number?
我知道 Python 不是最好的内存管理语言,但是有没有办法将小数字存储到比整数更小的内存部分?
我目前正在研究具有广度优先搜索的 Python 程序,我在类中使用一个参数,该参数只能具有 0 到 9 的值。我想尽可能有效地存储它,因为 - 如果我的大小为 1B 或 3B当您必须在运行内存中处理数千个变量时,这很重要。
不确定这是否真的值得,但是您始终可以将[0, 1, ..., 9]
整数编码为 4 位,并将其中的几个存储在 python int
。 打包和解包它们然后是一些位移和屏蔽:
SHIFT = 4
MASK = 0xf
integers = [0, 1, 5, 3]
# pack list into int
store = 0
for i in integers:
store <<= SHIFT
store ^= i
# unpack list from int
unpacked = []
for _ in range(len(integers)):
unpacked.append(store & MASK)
store >>= SHIFT
unpacked.reverse()
assert integers == unpacked
struct
模块也可能有用。
使用本机 python 代码,你不能,因为 python 的int
被硬编码为采用 24 字节来支持长整数。 这是有效的,因为在您的情况下,函数参数接受一位数
但是如果你记得 C 有一个解决方案,C 中的unsigned char
需要 1 个字节,并且数字范围为0 - 255
所以在python中它看起来像这样
>>> from ctypes import c_ubyte
>>> ten = c_ubyte(10)
>>> ten
c_ubyte(10)
>>> type(ten)
<class 'ctypes.c_ubyte'>
>>> ten.value
10
>>> type(ten.value)
<class 'int'>
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.