删除Python对象而不先删除所有引用

时间:2018-06-28 21:09:19

标签: python

一个简单的问题,是否可以从内存中删除对象并将所有剩余的指向该对象的指针设置为undefined?

2 个答案:

答案 0 :(得分:1)

您无法在Python中显式释放内存。

如果您要调用del x而又没有其他对x的引用,以防止它被垃圾回收,则可能要签出weakrefs

答案 1 :(得分:0)

如果您要创建某种可能导致无效的“可取消”对象,并导致随后的所有尝试使用该对象来获取None值或错误,则可以(按照某种方式)做到这一点,但是您的代码必须经过严格训练,以防止曾经获得直接引用,而始终以特殊方式引用对象,例如:

class deletable(object):
    def __init__(self, value):
        self.v = value
    def destroy(self):
        if hasattr(self,"v"): delattr(self, "v")

# create instance
x = deletable( { "key" : "value", "other" : 13 } )

# access
print (x.v["key"])

# re-assign
x.v = { "another" : "dict" }

# "destroy" - option 1 - trigger error on use
x.destroy()

# "destroy" - option 2 - make it None (free memory, but keep x.v valid)
x.v = None # or x.v = {}, if you want to keep it with the original data type of dict()

现在,此操作在您永远(永远)不做z = x.v并且始终始终绕过x的情况下起作用。

(如果您事先知道数据类型,并且始终相同,例如dict,则可以做得更好一些,并使自定义对象响应x [“ key”],x .update(some_dict)等,例如,看起来像常规的dict,但是仍然能够调用x.destroy()并使它无法进一步尝试访问。高级的东西,我不会在此处写整篇文章,甚至不知道我对您的实际需求做出了正确的猜测。