Python:删除对象并释放 Space

Python: Delete Objects and Free Up Space

Python 文档说,如果对象的引用计数为零且 del[= 之间的差异,则该对象被视为已删除65=] 是:

这意味着如果我们一直删除对对象的引用,直到引用计数为零。它会执行 __del__ 删除对象以释放内存。

然而,令我困扰的是:

欢迎任何意见和想法....

顺便说一句,如果发生的事情真的是我对 Python 中删除对象的理解。关于如何删除附加到列表中的对象并释放内存 space 有什么好的建议吗?

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

想象一个简单的 class:

class Thingy:
    pass

现在我可以创建这个 class 的对象并将其命名为 george:

george = Thingy()

现在我已经创建了 class 的一个实例并且我有一个对它的引用。这个计数在某处被维护并设置为 1。

我可以创建一个名为 mary 的新变量并将其分配给同一个对象:

mary = george

现在我仍然只有一个对象,但我有两个对它的引用。如果我在 george 上调用方法,这会影响 mary 引用的对象,因为它是同一个实例。

正如你提到的列表,让我们也将它添加到列表中,但本质上它完全相同,它将引用计数增加到 3。

my_objects = []
my_objects.append(george)

现在有3个参考。现在,仍然在这个方法中,让我们再次删除引用

george = None    # reference count drops to 2
mary = 3         # reference count drops to 1
my_objects.pop() # reference count drops to 0

当计数降为 0 时,python 运行时会意识到这一点(可能不是马上,但足够快)并调用实例上的 __del__ 方法。你不关心这个,你只是让引用消失。

Now, if I delete ObjectX and ListY, would the reference count to the object still remain as 1?

不,它会降为零。

and the object is still remaining sitting there in hard disk waiting for some kind soul to come and kill it?

不,它只是保留在内存中,将被删除并再次释放内存。