0
私はHDF5ファイルから読み込んだ潜在的に非常に大きな凹凸配列を作成して格納する関数を含むクラスを持っています。 (私はクラスオブジェクトとして配列を格納するので、ファイルからさまざまなHDF5データセットを読み込むと、手動ループではなくリストの理解が可能になります)。私が望むのは、格納された配列を同時に返したり削除したりすることですreturn文の後にメモリを置く)。Python:return文の後に自動的にクラスオブジェクトを削除する
class MWE(object):
def __init__(self,*args):
pass
return
def example(self,**kwargs):
self.array = readLargeArrayFromHDF5File(...)
return self.array # And simultaneously clean up self.array?
私は単に私のスクリプトの後半でdel MWE.array
のようなものを使用してアレイを削除することができることを知っているが、自動的に私はこれを行うには覚えていなくても、クリーンアップする方法はありますか?
ありがとうございます!
私はまだ学んでいますので、クラスオブジェクトが返されたときにどのように/どのようにクリーンアップされるかを明確にすることができます。 self.arrayは記憶からクリアされますか? (MWEクラスがまだ存在するので...)私はちょうど "array2 = MWE.example()"をやめ、そして2回のメモリを使うのを避けたいと思っています。 – aim
なぜあなたは配列を返してすぐにそれを削除するのですか?同じオブジェクトが呼び出し元に渡され、呼び出し元には渡されないことがわかりますか?また、delはオブジェクトへの参照を削除しているので、実際のメモリは保存されません。 –
@aimああ、ちょうどあなたのコメントを見ました。したがって、それらはコピーではなく参照です。 Pythonでオブジェクトをコピーするときは、通常、 'list_A_copy = list(list_A)'や 'dict_A_copy = {key:dict_A.items()のキーの値}'のような明示的な処理が必要です。 –