有没有办法从解释器的内存中删除创build的variables,函数等?

我一直在寻找这个问题的准确答案几天,但没有什么好的。 我不是一个完整的编程初学者,但还不是中等水平。

当我在Python的shell中时,input: dir() ,我可以看到当前范围(主块)中所有对象的所有名称,其中有6个:

 ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__'] 

然后,当我声明一个variables,例如x = 10 ,它会自动添加到内置模块dir()下的对象列表中,而当我再次键入dir()时,它现在显示:

 ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x'] 

同样的function,类等。

如何删除所有这些新的对象,而不删除在开始时可用的标准6?

我在这里读到了有关“内存清理”,“清理控制台”的问题,它会删除命令提示符窗口中的所有文本:

 >>> import sys >>> clear = lambda: os.system('cls') >>> clear() 

但是,这一切与我试图达到的目标无关,并没有清除所有使用的对象。

你可以用del删除单个名字:

 del x 

或者你可以从globals()对象中移除它们:

 for name in dir(): if not name.startswith('_'): del globals()[name] 

这只是一个示例循环; 它在防御方面只会删除不以下划线开头的名字,做出一个(不是无理由的)假设,即在解释器的开始只使用没有下划线的名字。 如果你真的想彻底,你可以使用一个硬编码的名称列表,而不是(白名单)。 除了退出并重新启动解释器之外,没有内置函数可以为您执行清除操作。

您导入的模块( import os )将继续导入,因为它们被sys.modules引用; 随后的导入将重用已经导入的模块对象。 在你当前的全局命名空间中你只是没有对它们的引用。

是。 有一个简单的方法可以删除iPython中的所有内容。 在iPython控制台中,只需键入:

 %reset 

然后系统会要求您确认。 按y。 如果你不想看到这个提示,只需input:

 %reset -f 

这应该工作..

实际上python将回收不再使用的内存。这被称为垃圾回收 ,它是python中的自动处理。 但是,如果你想这样做,那么你可以通过del variable_name删除它。 您也可以通过将该variables分配给None

 a = 10 print a del a print a ## throws an error here because it's been deleted already. 

从未引用的Python对象真正回收内存的唯一方法是通过垃圾回收器。 del关键字只是从一个对象中取消绑定一个名字,但是这个对象仍然需要被垃圾收集。 您可以强制垃圾收集器使用gc模块运行,但这几乎肯定是一个过早的优化,但它有其自身的风险。 使用del并没有什么实际效果,因为无论如何这些名字会被删除。