删除对对象的引用,但如果在其他位置引用,则将对象保留在内存中

时间:2019-03-25 14:39:20

标签: python reference garbage-collection

我面临的问题是: 函数在例程执行过程中的某个时刻接收对对象的引用并在这些引用上调用del。

这些引用所引用的对象有时在其他地方被引用,而有时未被引用。

我希望del语句仅删除函数中存在的引用。如果该对象未在程序的其他地方引用,则可以对其进行垃圾回收。 如果我是正确的,则del直接调用对象的析构函数,而不是简单地删除其引用。 如何获得所需的行为?

1 个答案:

答案 0 :(得分:2)

  

如果我是正确的,则del直接调用对象的析构函数,而不是简单地删除其引用。

假设使用CPython,这是不正确的。

__del__将对象的引用计数减少1。当引用计数达到0时,将对该对象进行垃圾回收。

如果 destructor 是指del魔术方法,请注意,通常是在对象被垃圾回收时而不是在{{1 }} 叫做。此外,there's no guarantee that the method would even be called

请注意,还有一个(可选)gc接口可以中断对象引用周期。