【发布时间】:2018-08-10 11:20:03
【问题描述】:
Python 文档说,如果对对象的引用计数为零,则认为该对象被删除,而 del 和 __del__ 之间的区别在于:
- del 将对对象的引用计数减一
- __del__ 在对象的引用计数为零时执行
这意味着如果我们一直删除对对象的引用,直到引用计数为零。它将执行 __del__ 来删除对象以释放内存。
然而,困扰我的是:
如果我创建一个对象并将该对象绑定到名称 ObjectX。它 引用计数会增加 1,对吧?
如果我创建一个名称为 ListY 的列表并附加 ListY ObjectX。这意味着它将增加引用计数 到2,对吧?
现在,如果我删除 ObjectX 和 ListY,引用计数 到对象仍然保持为 1 并且对象仍然存在 坐在硬盘里等着某个善良的灵魂来杀死它?
欢迎任何想法和想法....
顺便说一句,如果发生的事情真的是我对在 Python 中删除对象的理解。关于如何删除附加到列表中的对象并释放内存空间有什么好的建议吗?
class Slave:
def __init__(self):
self.name=""
def __del__(self):
print("SLAVE DEAD")
def sequence():
SlaveX=Slave()
slaveList=list()
slaveList.append(SlaveX)
del SlaveX
print("I AM NOT DEAD YET")
del slaveList
【问题讨论】:
-
它不会在你的硬盘上——当你关闭 python 时它就消失了。
-
如果你删除了两个引用,为什么引用计数仍然是 1?
-
当你删除 ObjectX 时它会下降一个。当你删除 ListY 时它会下降另一个。
-
因为我必须处理的数据量非常大。我担心在程序运行完成之前会发生内存泄漏。
-
你永远不会打电话给
__del__,当计数变为零时会为你调用。如果愿意,您可以调用del,但只需退出分配 ObjectX 和 ListY 的方法就足以将引用计数减为零,因此(通常)您不需要调用del。
标签: python python-2.7 object reference destructor