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

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

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

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

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago