使用Python删除内存中的对象

时间:2017-06-06 07:44: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()

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我不知道写作是什么意思:

  

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

使用del语句时,删除对象的引用。它会耗尽内存,直到调用垃圾收集器。请记住,这可能是一个耗时的过程,如果进程有足够的内存来继续执行,则不需要这样做。

一般来说,Python不执行C ++ - 就像析构函数bahaviour。

“专家Python编程”的引用:

  

这种内存管理器的方法大致基于一个简单的方法   声明:如果不再引用给定对象,则将其删除。   换句话说,函数中的所有本地引用都将被删除   口译员:

     

•离开功能

     

•确保不再使用该物体。

     

在正常情况下,收藏家会做一个   不错的工作。但del调用可以用来帮助垃圾收集器   手动删除对象的引用。

所以你不要手工管理记忆。你可以帮助垃圾收集器,但最好在幕后留下记忆管理。