我正在使用基于 Python 的 Sage Mathematics 软件来创建一个很长的向量列表。该列表包含大约 100,000,000 个元素,sys.getsizeof() 告诉我它的大小略小于 1GB。
我将这个列表放入一个文件中(这已经花费了很长时间——但很公平)。只有当我解开这个列表时,它才会变得烦人。 RAM 使用量从 1.15GB 增加到 4.3GB,我想知道发生了什么?
我怎样才能在 Sage 中找到所有内存的用途?您是否有任何想法如何通过应用 Python 技巧来优化它?
这是对 kcrisman 评论的回复。
我无法发布确切的代码,因为它太长了。但这里有一个简单的例子,可以观察到这些现象。我正在使用 Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux。
启动Sage并执行:
import pickle
L = [vector([1,2,3]) for k in range(1000000)]
f = open("mylist", 'w')
pickle.dump(L, f)
在我的系统上,该列表有 8697472 字节大,我腌制到的文件大约有 130MB。现在关闭 Sage 并观察您的记忆(例如,使用 htop)。然后执行以下几行:
import pickle
f = open("mylist", 'r')
pickle.load(f)
如果没有 Sage,我的 Linux 系统使用 1035MB 内存,当 Sage 运行时,使用量会增加到 1131MB。在我解压该文件后,它使用了 2535MB,我觉得很奇怪。