使用Python删除内存中的对象

2024-05-16 02:28:14 发布

您现在位置: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()

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

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


Tags: 对象selfreturnobjectvaluedefcheckclass
2条回答

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

我不知道你写什么意思:

If not then what is wrong with code and how to correct it

使用del语句时,删除对对象的引用。在调用所有垃圾收集器之前,它将耗尽内存。请记住,这可能是一个耗时的进程,如果该进程有足够的内存来继续执行,则不必这样做。

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

引用“专家Python编程”:

The approach of such a memory manager is roughly based on a simple statement: If a given object is not referenced anymore, it is removed. In other words, all local references in a function are removed after the interpreter:

• Leaves the function

• Makes sure the object is not being used anymore.

Under normal conditions, the collector will do a nice job. But a del call can be used to help the garbage collector by manually removing the references to an object manually.

所以你不能用手来管理记忆。你可以帮助垃圾收集器,但最好把内存管理留在幕后。

相关问题 更多 >