Python 如何使一个对象即使强制删除也不可摧毁?

Python 如何使一个对象即使强制删除也不可摧毁?,python,class,object,del,Python,Class,Object,Del,我怎样才能使一个对象如此坚不可摧,以至于即使使用del保留字,我认为这意味着强制删除,它也不会被删除 我将对象存储在列表中,如下所示: list = [obj1, obj2, obj3, obj4 ....] del list[0] 我想我必须对object类中的uu del uu做一些技巧,但是如何做呢?python中的对象具有引用计数,这基本上意味着对象存在的位置数量。使用del会删除对对象的一个引用,但不会强制删除它。然后在剩下0个引用时调用。您可以创建对该对象的新引用,这样可以防止删除

我怎样才能使一个对象如此坚不可摧,以至于即使使用del保留字,我认为这意味着强制删除,它也不会被删除

我将对象存储在列表中,如下所示:

list = [obj1, obj2, obj3, obj4 ....]
del list[0]

我想我必须对object类中的uu del uu做一些技巧,但是如何做呢?

python中的对象具有引用计数,这基本上意味着对象存在的位置数量。使用del会删除对对象的一个引用,但不会强制删除它。然后在剩下0个引用时调用。您可以创建对该对象的新引用,这样可以防止删除该对象,如下所示:

class obj:
    def __del__(self):
         global _ref
         _ref = self
         return
这将通过创建全局引用防止删除对象。 请记住,不建议这样做,因为这样会阻止垃圾收集器正常工作

更新:

在使用列表的情况下,应将其转换为元组等不可变对象,以防止类似删除的更改:

mylist = [obj1, obj2, obj3, obj4 ....]
mylist = tuple(mylist)

仅当没有引用对象的名称时,才会删除对象。在这种情况下,您的对象无法使用,那么您为什么希望它存在?del并不意味着强制删除。del删除的是名称,而不是对象。只有当指向该对象的所有名称都被删除时,该对象才会被删除。@mertyildiran:这个问题表明对del和对象删除的误解。这个问题的答案显示了更好的方法来实现这个问题试图用del做的事情。你想对戴尔做什么?基本上,在Python中删除对象时不受您的控制。Python中没有强制删除这种东西。@mertyildiran这不是C,你不分配内存块,而是创建对象并给它们命名。我刚刚意识到我需要使用一个不可变的对象,比如元组来存储引用我的受保护对象的名称。请将此添加到您的答案中,我将给出正确的答案。@mertyildiran添加了此选项,但请记住,转换为元组将不允许对元组本身进行任何修改,但允许对内部对象进行修改