予約語 (強制削除を意味すると思います)を使用しても削除されないほどオブジェクトを破壊できないようにするにはどうすればよいですか?del
次のように、オブジェクトをリストに格納しています。
list = [obj1, obj2, obj3, obj4 ....]
del list[0]
__del__()
オブジェクトのクラス内でいくつかのトリックを行う必要があると思いますが、どうすればよいですか?
Python のオブジェクトには、基本的にオブジェクトが存在する場所の量を意味する参照カウントがあります。使用del
すると、オブジェクトへの参照が 1 つ削除されます (強制的に削除されるわけではありません)。__del__
次に、参照が 0 個残っているときに呼び出されます。オブジェクトへの新しい参照を作成すると、次のように削除を防ぐことができます。
class obj:
def __del__(self):
global _ref
_ref = self
return
これにより、グローバル参照が作成され、オブジェクトの削除が防止されます。ガベージ コレクタが正しく機能しなくなるため、これは推奨されないことに注意してください。
アップデート:
リストを使用している場合は、tuple
削除などの変更を防ぐために、リストを a などの不変オブジェクトに変換する必要があります。
mylist = [obj1, obj2, obj3, obj4 ....]
mylist = tuple(mylist)