即使强制删除,如何使对象坚不可摧?
How to make an object indestructible even with force deletion?
我怎样才能使一个对象坚不可摧,即使使用del
保留字(我认为这意味着强制删除) 不会被删除?
我将对象存储在列表中,如下所示:
list = [obj1, obj2, obj3, obj4 ....]
del list[0]
我想我必须在对象的 class 中用 __del__()
做一些技巧,但是怎么做呢?
python 中的对象有引用计数,这基本上意味着一个对象存在的位置数量。使用 del
删除一个对该对象的引用(它不会强制删除它)。 __del__
然后在剩下 0 个引用时调用。您可以创建对该对象的新引用,这样可以防止它被删除:
class obj:
def __del__(self):
global _ref
_ref = self
return
这将通过创建全局引用来防止删除对象。
请记住,不建议这样做,因为它会阻止垃圾收集器正常工作。
更新:
如果您使用的是列表,则应将其转换为不可变对象,例如 tuple
以防止像删除这样的更改:
mylist = [obj1, obj2, obj3, obj4 ....]
mylist = tuple(mylist)
我怎样才能使一个对象坚不可摧,即使使用del
保留字(我认为这意味着强制删除) 不会被删除?
我将对象存储在列表中,如下所示:
list = [obj1, obj2, obj3, obj4 ....]
del list[0]
我想我必须在对象的 class 中用 __del__()
做一些技巧,但是怎么做呢?
python 中的对象有引用计数,这基本上意味着一个对象存在的位置数量。使用 del
删除一个对该对象的引用(它不会强制删除它)。 __del__
然后在剩下 0 个引用时调用。您可以创建对该对象的新引用,这样可以防止它被删除:
class obj:
def __del__(self):
global _ref
_ref = self
return
这将通过创建全局引用来防止删除对象。 请记住,不建议这样做,因为它会阻止垃圾收集器正常工作。
更新:
如果您使用的是列表,则应将其转换为不可变对象,例如 tuple
以防止像删除这样的更改:
mylist = [obj1, obj2, obj3, obj4 ....]
mylist = tuple(mylist)