Python 大型 bytearray 内存

1 投票
2 回答
3580 浏览
提问于 2025-04-18 14:03

假设我创建了一个很大的字节数组。比如说,1000000字节,也就是1MB的总大小。那么,解释器会在内存中预留1MB的空间,还是说只有在字节数组逐渐填充的时候才会使用内存?也就是说,一个大部分是空的1000000字节的字节数组,会占用1MB的内存吗?

2 个回答

2

sys.getsizeof 可以用来查看一个对象占用的字节数:

In [242]: sys.getsizeof(bytearray(10**6))
Out[242]: 1000025

所以,确实 bytearray(10**6) 大约占用了 1MB 的空间。

需要注意的是,虽然 sys.getsizeof 对于字节数组(bytearray)能给出准确的大小,但如果用在像列表这样的容器上,它只会告诉你这个容器本身的大小,而不包括容器里面的内容。

如果你想计算一个对象的大小,包括它里面的内容,可以参考这个方法(在文档中提到过)。

3

我觉得在创建的时候就已经分配或保留了内存。下面这一行代码在我的系统上会让解释器的内存使用量增加大约100MB。

b = bytearray(1024*1024*100)

如果文档没有提到这一点,我想这就要看具体的实现方式了。

撰写回答