我这几天一直在寻找这个问题的准确答案,但没有得到任何好的结果。我不是一个完全的编程初学者,但还没有达到中级水平。
当我在 Python 的 shell 中,我输入:dir()
并且我可以看到当前作用域(主 block )中所有对象的所有名称,有 6 个他们:
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
然后,当我声明一个变量时,例如 x = 10
,它会自动添加到内置模块 dir()
下的对象列表中,当我再次输入 dir()
时,它现在显示:
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x']
函数、类等也是如此。
如何删除所有这些新对象而不删除开始时可用的标准 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
引用;后续导入将重用已导入的模块对象。您只是不会在当前的全局命名空间中引用它们。
然而,Python 不对内存中的数据做出任何安全保证。当不再引用对象时,解释器将内存标记为不再使用,但不会采取措施覆盖该内存以防止访问数据。如果您需要这种级别的安全保护,则需要使用第三方扩展来管理自己的内存并考虑到安全性。
关于python - 有没有办法从解释器的内存中删除创建的变量、函数等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26545051/