我有一个保存在文件中的字典.我从
python交互式shell将字典加载到内存中,我的系统监视器说python进程消耗4GB.
以下命令提供以下输出:
size1 = sys.getsizeof(mydict)/(1024**2)
print size1
96
size2 = 0
for i in mydict.keys():
size2 += sys.getsizeof(i)
print size2/(1024**2)
37
size3 = 0
for i in mydict.keys():
size3 += sys.getsizeof(mydict[i])
print size3/(1024**2)
981
size4 = 0
for i in mydict.keys():
for j in mydict[i]:
size4 += j
print size4/(1024**2)
2302
print str(size1 + size2 + size3 + size4)
3416
现在,如果我删除字典
del(mydict)
gc.collect()
从内存中释放不到400MB.
即使我从字典中的列表中逐个删除所有项目,释放的内存不超过450-500 MB ..所以我最终在我的shell中没有变量,但仍然消耗3,5GB.谁能解释一下发生了什么?
最佳答案 要记住两件事:
即使您删除整个对象,python也可能会保留该内存以供进一步使用(而不是稍后再次分配内存). python在os中留下的足迹不会发生显着变化.
在基于Linux和UNIX的系统上,在应用程序终止之前,进程不一定会返回已分配的内存.
为了成功释放内存,您可能需要查看garbage collector.使用它可以强制python释放分配的内存.