在Python中存储一个小于256的整数

2024-04-26 02:25:50 发布

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

我有一个很大的数组(数组)在0-255范围内。因为我知道整数的范围,所以我想通过将每个整数存储在单个字节中来优化它们所占用的空间。在

<>在C++中,我只需使用^ {CD1>}来存储整数,但我无法在Python中找到出路。在

>>> a = 10
>>> sys.getsizeof(a)
24
>>> b = chr(a)
>>> sys.getsizeof(b)
38
>>> c = bytearray(1)
>>> c[0] = b
>>> c[0]
10
>>> sys.getsizeof(c[0])
24
>>> c
bytearray(b'\n')
>>> sys.getsizeof(c)
50

我已经搜索了Python中可用的数据类型,但是我无法得到任何可以使sys.getsizeof()等于1的数据类型。 我想知道是否存在一种存储这些整数的空间最优方式。在


Tags: 字节sys方式空间整数数组数据类型cd1
3条回答

您可以使用numpy数组来实现这一点。E、 g.:

import numpy as np

byte_array = np.empty(10, np.uint8) # an array of 10 uninitialized bytes

有关详细信息,请参阅其他numpy array constructors。在

sys.getsizeof(c[0])不报告用于存储c的第一个元素的实际内存量。访问c[0]使Python构造一个整数对象(或从小整数缓存中获取一个)来表示该值,但是bytearray确实将该值存储为一个字节。在

这在更大的bytearray中更为明显:

>>> sys.getsizeof(bytearray([5]*1000))
1168

您可以看到,这个bytearray不可能每个元素使用超过1个字节,或者它的大小至少是2000个字节。(多余的空间是由于过度分配以容纳额外的元素,以及一些对象开销。)

如果您要处理的是大型阵列,那么最好使用numpy,其中包括许多适合您的阵列工具。在

有一些开销,但它是最小的:

import numpy as np
import sys

a = np.array([0]*10000, np.uint8)    
len(a)
# 10000
sys.getsizeof(a)
# 10048
sys.getsizeof(a[0])
# 13
a = np.array([0]*1000000, np.uint8)
sys.getsizeof(a)
# 1000048

相关问题 更多 >