Python PR

【Python】オブジェクトを削除してメモリを解放する

記事内に商品プロモーションを含む場合があります

この記事では、Pythonでオブジェクトを削除してメモリを解放する方法を解説します。

膨大なデータを扱うときやメモリ制限が設けられている場合などでは、明示的にメモリを解放したい場合があります。

そんな時は、del文とgc.collect()を使って明示的にメモリを解放しましょう!

オブジェクトの削除について

Pythonで不要になったオブジェクトは、特別な処理をしなくても「ガベージコレクタ」によって勝手に削除されます。

ガベージコレクタとは、メモリを管理する機能のことを言い、中でも不要になったメモリを解放する機能のことを「ガベージコレクション」と呼びます。

「勝手に消してくれるなら明示的に削除する必要なくね」と思うかもしれませんが、ガベージコレクションは不要になったメモリをすぐさま解放してくれるわけではありません。

なので、膨大なデータを扱う場合などでは、不要になったオブジェクトを明示的に削除してメモリをすぐさま解放しなければならない時があります。

オブジェクトの削除

オブジェクトを明示的に削除するにはdel文を使います。

del 削除するオブジェクト

del文は、複数のオブジェクトをまとめて削除することができ、

del 削除するオブジェクト1, 削除するオブジェクト2, 削除するオブジェクト3, ...

リストの要素や、

del リスト[インデックス]

辞書の要素も削除することができる。

del 辞書[key]

サンプル

生成した変数をdel文で削除して出力できるか試してみます。

value = 1
print(value)

# 削除
del value
print(value)

実行結果

1
Traceback (most recent call last):
  File "main.py", line 6, in 
    print(value)
NameError: name 'value' is not defined

メモリの解放

del文でオブジェクトを削除しただけでは、メモリは解放されないので明示的にメモリを解放してやる必要があります。

明示的にメモリを解放するには、gcモジュールのcollect()を使います。gcモジュールは、標準ライブラリなのでインポートするだけで使用可能です。

例えば以下のように、del文でオブジェクトを削除してからgc.collect()を実行する。

import gc

values = [1, 2, 3]

# オブジェクト削除
del values

# メモリ解放
gc.collect()

まとめ

この記事では、オブジェクトを削除してメモリを解放する方法を解説しました。

Pythonは、あまりメモリを気にしなくても扱うことができますが、ガベージコレクションではおっつかない場合は、明示的に解放してやりましょう!

del文は必ずしも__del__()メソッドを呼び出すとは限らない点に注意してください。

Linkクラスに __del__ メソッドを定義しているのですが、オブジェクトを削除したときに呼ばれません。- プログラミング FAQ — Python 3.10.4 ドキュメント

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ