Python でメモリをクリアする
このチュートリアルでは、プログラムの実行中に Python でメモリを解放またはクリアする方法について説明します。プログラムが大きなファイルを処理する必要がある場合、大量のデータを処理するか、データをメモリに保持します。これらのタイプのシナリオでは、プログラムがメモリ不足になることがよくあります。
プログラムのメモリ不足を防ぐには、変数またはデータをクリアしてメモリを解放またはクリアする必要がありますが、これはプログラムでは不要になります。次の方法を使用して、Python でメモリをクリアできます。
Python で gc.collect()
メソッドを使用してメモリをクリアする
gc.collect(generation=2)
メソッドは、Python で参照されていないメモリをクリアまたは解放するために使用されます。参照されていないメモリは、アクセスできず、使用できないメモリです。オプションの引数 generation
は、値の範囲が 0
から 2
の整数です。gc.collect()
メソッドを使用して収集するオブジェクトの生成を指定します。
Python では、寿命の短いオブジェクトは世代 0
に保存され、寿命の長いオブジェクトは世代 1
または 2
に保存されます。ガベージコレクタによって維持されているリストは、デフォルトの generation
値が 2
である gc.collect()
が呼び出されるたびにクリアされます。
gc.collect()
メソッドは、プログラムの実行中にメモリ使用量を減らし、参照されていないメモリをクリアするのに役立ちます。メモリのアクセスできないデータをクリアすることにより、プログラムのメモリ不足やクラッシュを防ぐことができます。
Python で del
ステートメントを使用してメモリをクリアする
gc.collect()
メソッドとともに、del
ステートメントは Python のプログラム実行中にメモリをクリアするのに非常に役立ちます。del
ステートメントは、Python で変数を削除するために使用されます。最初に、プログラムで不要になったと確信している大きなリストや配列などの変数を削除できます。
以下のサンプルコードは、del
ステートメントを使用して変数を削除する方法を示しています。
import numpy as np
a = np.array([1, 2, 3])
del a
変数を削除した後、変数を使用またはアクセスしようとしたとします。その場合、アクセスしようとしている変数が変数名前空間に存在しないため、プログラムは NameError
例外を返します。
コード例:
import numpy as np
a = np.array([1, 2, 3])
del a
print(a)
出力:
NameError: name 'a' is not defined
del
ステートメントは名前空間から変数を削除しますが、必ずしもメモリから変数をクリアするわけではありません。したがって、del
ステートメントを使用して変数を削除した後、gc.collect()
メソッドを使用して変数をメモリからクリアできます。
以下のサンプルコードは、del
ステートメントを gc.collect()
メソッドとともに使用して Python のメモリをクリアする方法を示しています。
import numpy as np
import gc
a = np.array([1, 2, 3])
del a
gc.collect()