python - 有没有办法从解释器的内存中删除创建的变量、函数等?

标签 python memory-management dir

我这几天一直在寻找这个问题的准确答案,但没有得到任何好的结果。我不是一个完全的编程初学者,但还没有达到中级水平。

当我在 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/

相关文章:

c - 如何使用 C 将动态字符串放入数组中

python - 没有名为 'keras.legacy' 的模块

python - 在 pandas 数据框中找到特定 alpha 的临界值?

C++ 删除具有有效地址的指针

c++ - std::map 分配是否尽可能静态?

具有可变参数的 Python dir() 函数

python - 使用默认为节点名称的节点标签绘制 networkx 图

python - 使用 python 纯 SASL,我们现在可以编写 python 客户端来访问 Message Hub 吗?

Java 静态与线程堆栈

php - 在目录中查找文件