python内存回收的问题

Posted Stay hungery

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python内存回收的问题相关的知识,希望对你有一定的参考价值。

python实际上,对于占用很大内存的对象,并不会马上释放。

举例,a=range(10000*10000),会发现内存飙升一个多G,del a 或者a=[]都不能将内存降下来。。

del 可以删除多个变量,del a,b,c,d
办法:
import gc (garbage collector)
del a
gc.collect()

马上内存就释放了。

 

 

在IPython中用run运行程序时,都是在独立的运行环境中运行,结束之后才将程序运行环境中的结果复制到IPython环境中,因此不会有变量被重复调用的问题。

如果你是指在自己的程序中想删除所有全局变量的话,可以自己编写一个clear函数,通过globals()获取全局变量然后将其中不需要的内容删除,例如下面的程序保留函数,类,模块,删除所有其它全局变量:

 

def clear():

    for key, value in globals().items():

        if callable(value) or value.__class__.__name__ == "module":

            continue

        del globals()[key]

不过程序中应该避免这种对全局变量的依赖。你也可以在IPython下用此函数清空全局变量。








以上是关于python内存回收的问题的主要内容,如果未能解决你的问题,请参考以下文章

python的内存回收机制

python 垃圾回收机制的思考

[新星计划] Python内存管理 | 引用计数垃圾回收内存池机制

[新星计划] Python内存管理 | 引用计数垃圾回收内存池机制

[新星计划] Python内存管理 | 引用计数垃圾回收内存池机制

Python之垃圾回收机制与用户交互