首页 > 解决方案 > 在python for循环中删除变量是否会提高内存效率?

问题描述

假设我有一个变量,我将在其中循环使用 1000 次,这样:

A = [3,4,5,6]
for i in range(1000):
    # if something
    # c = <a list which length depends on runtime>
    A = c
    del c

单循环后删除 c 会使内存消耗更有效吗?

标签: pythonlistloopsdel

解决方案


一般来说,没有。它没有。

del 从命名空间中删除名称,而不是对象。

当然,如果你删除一个引用,并且引用计数达到 0,那么该对象将被回收(在 CPython 中立即)。

但是请注意,在上面的循环中,无论如何您都创建了另一个引用A = c所以它绝对没有帮助。

一种情况下,这可能是有益的,假设您在全局范围内执行此操作,例如在模块级别,而不是在函数中。因为 python for 循环不创建自己的范围,c现在保留在全局命名空间中,并且可能会保持一个巨大的列表活动,直到程序结束。

通常可以通过将程序更好地组织成模块化函数来更好地解决,并且只在全局范围内创建对您希望在程序结束之前存在的对象的引用。但是,有时,您最终会执行这样的循环,在这种情况下,显式删除最后一个引用确实有帮助(但同样,既然您这样做了A = c,那么它无论如何也无济于事)。

我觉得您对 Python 变量的工作方式存在根本性的误解。我赞同评论中的建议:

https://nedbatchelder.com/text/names.html


推荐阅读