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

丰格霍恩:

我一直在寻找这个问题的准确答案已有几天了,但是还没有任何好的结果。我不是编程的完整初学者,但即使是中级水平的人也还没有。

当我进入Python的外壳程序时,键入:dir()并且可以看到当前作用域(主块)中所有对象的所有名称,其中有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()

但是,所有这些都与我要实现的目标无关,它不会清除所有使用过的对象。

马丁·彼得斯(Martijn Pieters):

您可以使用以下方法删除个人名称del

del x

或者您可以将它们从globals()对象中删除

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

这只是一个示例循环。它仅在防御性上删除不以下划线开头的名称,并假设(不是毫无道理的)假设您在解释器的开头仅使用了没有下划线的名称。如果您确实想透彻一点,则可以使用硬编码的名称列表来保留(白名单)。除了退出并重新启动解释器外,没有内置函数可以为您执行清除操作。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法在C ++中创建未知数量的变量的构造函数?

有没有办法在 React 中为装饰器创建组合函数?

有没有办法在Windows中运行Java解释器/控制台?

有没有办法防止自动变量删除?

有没有办法创建全局 CSS 变量?

有没有办法通过迭代创建变量?

有没有办法防止Activity在后台从内存中删除?

有没有办法创建全局设置器?

有没有办法在 C 中为 i_block 创建迭代器样式函数?

有没有办法在 Azure CLI 的函数应用中创建函数?

有没有办法删除JShell中的导入?

有没有办法从Method []中删除对象

有没有办法从结构中删除未使用的变量?

有没有办法在regexp中插入变量?

有没有办法在ISim中显示变量?

有没有办法删除 firebase 中创建的自定义跟踪/指标?

有没有办法在 manim 中创建散点图?

有没有办法在Lua中创建GUI?

有没有办法访问动态创建的组件中的@Input变量?

有没有办法在 C++ 中创建类型变量?

有没有办法在java中自动创建变量?

有没有办法在C ++中复合函数?

有没有办法在ListView中调用函数?

有没有办法从另一个函数访问main中的变量?

PHP-有没有办法将已经定义的函数保存在变量中?

有没有办法从突变更新函数中获取变量?

有没有办法从函数内部定义的变量中获取信息?

有没有办法在打字稿定义中引用函数自变量?

有没有办法从python中的调用函数访问变量?