使用Python删除内存中的对象

use*_*846 2 python

我正在尝试这种方法来删除 python 中的对象。我阅读了 Python 的文档,指出垃圾收集器将自动删除未引用的对象。

def check():
    class newOb():
        def __init__(self,value):
            self.value = value
            print self.value
            return None

    class ob:
        ins = {}
        def cr(self,someuniqueid,value) :
            newV = newOb(value)
            ob.ins[someuniqueid] = newV ## saving this object refernce to the ob class ins dictionary
            return newV

    #### Accessing Object ###
    someuniqueid  = 12
    c = ob()
    d = c.cr(someuniqueid,123)
    print d.value ## will print 123
    # now deleting the associated object
    del c.ins[someuniqueid]

check()
Run Code Online (Sandbox Code Playgroud)

在最后一步,我从内存中删除对象引用正在使用上述过程将从内存中删除对象

如果不是,那么代码有什么问题以及如何纠正它

cs9*_*s95 10

您也需要这样做del d,因为d它还持有对同一对象的引用。调用del只会减少引用计数并从使用中删除特定引用,但在引用计数达到之前,内存中的实际对象不会被垃圾收集0


gon*_*zor 8

我不知道你写的是什么意思:

\n
\n

如果不是,那么代码有什么问题以及如何纠正它

\n
\n

当你使用del语句时,您删除了对对象的引用。它将耗尽内存,直到调用垃圾收集器。请记住,这可能是一个耗时的过程,如果该进程有足够的内存来继续执行,则没有必要。

\n

一般来说,Python 不执行类似 C++ 的析构函数行为。

\n

引用《Python 专家编程》:

\n
\n

这种内存管理器的方法大致基于一个简单的\n语句:如果不再引用给定的对象,则将其删除。\n换句话说,在解释器之后\n函数中的所有本地引用都将被删除:

\n

\xe2\x80\xa2 离开函数

\n

\xe2\x80\xa2 确保该对象不再被使用。

\n

在正常情况下,收集器会很好地完成工作。但是 del 调用可用于帮助垃圾收集器\n手动删除对对象的引用。

\n
\n

所以你不用手动管理内存。您可以帮助垃圾收集器,但最好将内存管理留在幕后。

\n