Python内存管理 – 字典

我有一个保存在文件中的字典.我从
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释放分配的内存.

点赞