繁体   English   中英

我可以用更少的内存来保存一位数吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM