【问题标题】:Python - size of object in memory vs. on diskPython - 内存中对象的大小与磁盘上的大小
【发布时间】:2018-06-13 14:55:43
【问题描述】:

这是我的例子:

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 空间

有人能解释一下为什么它在内存中占用这么少空间而在磁盘上占用这么多空间吗?我猜记忆中的数字不准确。

【问题讨论】:

  • 你觉得如何,10 亿个数字适合 8KB?

标签: python file memory pickle disk


【解决方案1】:

我猜记忆中的数字不准确。

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

test 是 Python list 实例。 getsizeof 会告诉您“指针”的大小,在您的系统上它是 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?

【讨论】:

  • @StefanPochmann 嗯,是的,在 Python 中它有点复杂。对象是PyObjects,具有引用计数器和指向实际类型的类型,例如PyIntObject(结构子类型),它再次保存实际值和另一个引用计数等。所有这些都在链接页面或 Python 文档中得到了很好的解释。
猜你喜欢
  • 2014-05-24
  • 2013-07-30
  • 2012-09-13
  • 2010-09-20
  • 1970-01-01
  • 2015-11-14
  • 2017-11-11
  • 1970-01-01
  • 2011-11-01
相关资源
最近更新 更多