Python

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

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

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』