Python - 変数の削除とメモリ開放

不要になった変数を削除するには キーワード del を使用します。

変数を削除する方法

del のあとに 削除したい変数を指定します。カンマ(,) で区切ることで、複数の変数をまとめて削除できます。
del <変数>

# まとめて削除
del <変数>, <変数>, <変数>, <変数>

サンプルコード

次のサンプルコードは del を使用し、変数 strValue を削除しています。削除後に 変数 strValue を使用しているため、NameError が発生します。
strValue = 'Hello world!!'

print(strValue)
# 結果 = 'Hello World!!'

del strValue

print(strValue)
# NameError: name 'strValue' is not defined

サンプルコード

次のサンプルコードでは del を使用して2つの変数、value1 と value2 をまとめて削除しています。
value1 = 100
value2 = 200

del value1, value2

変数の削除とオブジェクトの生存

del文で変数を削除しても、その変数が参照していたオブジェクト自体は削除されません。削除されるのは 変数の定義 のみで、その変数が指していたデータ(オブジェクト)はメモリ上に残ります。

以下のサンプルコードでは、value1 という変数に格納された文字列を value2 にも格納しています。その後、value1 を削除しても、value2 から元の文字列にアクセスすることができます。これは、value1 と value2 が同じオブジェクトを参照していたためです。

value1 = 'Hello world!!'
value2 = value1

print(value1)  # 出力 >> 'Hello World!!'
print(value2)  # 出力 >> 'Hello World!!'

del value1

print(value2)  # 出力 >> 'Hello World!!'
print(value1)  # NameError: name 'value1' is not defined.

メモリ開放について

del を使用して変数を削除すると、その変数が参照していたオブジェクトは「メモリから開放してもよい」とマークされます。ただし、このマークはそのオブジェクトへの全ての参照がなくなったとき、つまりそのオブジェクトがどの変数からもアクセスできなくなったときにのみ付けられます。マークされたオブジェクトは適切なタイミングでメモリから開放されます。

メモリ管理は複雑な処理であり、多くのプログラミング言語でこのような方法が採用されています。このような仕組みを「ガベージコレクション」と呼びます。

検証環境