-6

予約語 (強制削除を意味すると思います)を使用しても削除されないほどオブジェクトを破壊できないようにするにはどうすればよいですか?del

次のように、オブジェクトをリストに格納しています。

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

__del__()オブジェクトのクラス内でいくつかのトリックを行う必要があると思いますが、どうすればよいですか?

4

1 に答える 1

3

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)
于 2016-03-13T22:16:19.127 に答える