我在tuple
中有一个非常大的对象,我想明确删除它。不幸的是,由于元组是不可变的,只需执行del tup[0]
抛出:
TypeError: 'tuple' object doesn't support item deletion
我实际上根本不需要tup
,所以我可以删除整个事情,我只想确保立即删除tup
引用的大对象而不等待垃圾收集器。
只是删除tup
会立即删除它还是有更好的方式?
答案 0 :(得分:4)
del
不回收内存。它不删除对象。取决于您是删除索引(如del somelist[0]
),属性(如del foo.attr
)还是变量(如del foo
)。
del
将 减少 引用计数器 ,如果引用计数器达到零,则内存将被回收,通常立即
如果存在循环引用,则垃圾收集器必须逐步删除它们。因此,如果您绝对需要使用元组删除大对象,则可以使用:
import gc
del tup
gc.collect()
请注意,如果其他项引用大对象,则仍然不会删除它。因此,请确保只有一个引用。
对于没有特殊del
ete过程的简单变量(有些变量,如关闭文件),del
将从本地范围中删除变量,并将引用计数设置为小于它在此之前。例如,这通常比将变量设置为None
更快,因为在后一种情况下,它将增加None
单例的引用计数。