私は、(600,800)や(3,600,800)のような数百の本当に大きな行列を持っています。numpy配列をNoneに設定してもメモリは空きますか?
したがって、私はもう本当に何も必要がないとすぐに、使用されているメモリの割り当てを解除したいと思います。
私は考えた:
some_matrix = None
は、仕事をする、あるいは単にNoneに設定された基準が、どこかにまだメモリ内に割り当てられたスペースであるべきでしょうか? (あとでsome_matrix
の再初期化のために割り当てられた領域を保存するのと同じように)
さらに、時々私は行列をスライスして何かを計算し、値をバッファに入れます時間)。したがって、リストをNoneに設定すると、間違いなくメモリが解放されます。
unset()
の方法がありますか?全体の識別子とその参照先のオブジェクトが「削除」されていますか?
関数/メソッドを明確にしてくれてありがとう。私はすでにローカル変数がreturnステートメントの後に(Javaや他の言語のように)捨てられていると仮定しましたが、Pythonが実際に同じことを実際に行っていることを聞いてうれしいです。しかし、 'del some_array'または一般に' del some_variable'は明示的にメモリを解放するための最初の選択であるべきですか? – daniel451
'' del''は変数名を削除するので、削除された変数を含むそれ以降の操作はエラーを発生させます。一方、 '' a = None''は変数 '' a''を保持していますので、後でそれを実際に "削除"していることに気付かないかもしれません。 – MSeifert
よろしくお願いいたします。しかし、2番目のシナリオは 'del'でも何も解放しません。したがって、 'del'は識別子とその参照を削除しますが、他の識別子がそれを参照していないときに参照の背後にあるオブジェクトは削除されます。だから、あなたの例では 'b'のように他の識別子がオブジェクトを参照する限り、ガベージコレクタはオブジェクトを削除しません。 – daniel451