Python - 对象在内存中与在磁盘上的大小

Python - size of object in memory vs. on disk

这是我的例子:

import numpy as np
test = [np.random.choice(range(1, 1000), 1000000) for el in range(1,1000)]

此对象占用内存:

print(sys.getsizeof(test)/1024/1024/1024)
8.404254913330078e-06

大约 8 KB

当我将它写入磁盘时

import pickle
file_path = './test.pickle'
with open(file_path, 'wb') as f:
    pickle.dump(test, f)

ls -l 命令

占用将近 8GB

有人能解释一下为什么 space 占用的内存如此之少而占用磁盘的空间却如此之大吗?我猜记忆中的数字不准确。

I am guessing in memory numbers are not accurate.

好吧,这不能解释 6 个数量级的大小,对吧? ;)

test 是一个 Python list 实例。 getsizeof 会告诉你 "a pointer" 的大小,它在你的系统上是 64 位的,还有一些其他属性。但是你需要做更多的事情来获取附加到这个实例的所有东西,检查每个元素(列表在 Python 中没有严格的类型,所以你不能简单地做 size_of_element * len(list) 等.).

这是一个资源:https://code.tutsplus.com/tutorials/understand-how-much-memory-your-python-objects-use--cms-25609

这是另一个:How do I determine the size of an object in Python?