変数を削除する方法
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 を使用して変数を削除すると、その変数が参照していたオブジェクトは「メモリから開放してもよい」とマークされます。ただし、このマークはそのオブジェクトへの全ての参照がなくなったとき、つまりそのオブジェクトがどの変数からもアクセスできなくなったときにのみ付けられます。マークされたオブジェクトは適切なタイミングでメモリから開放されます。メモリ管理は複雑な処理であり、多くのプログラミング言語でこのような方法が採用されています。このような仕組みを「ガベージコレクション」と呼びます。
検証環境
- Python 3.11.3 (tags/v3.11.3:f3909b8, Apr 4 2023, 23:49:59) [MSC v.1934 64 bit (AMD64)] on win32
- Microsoft Windows 10 Enterprise Version 22H2 OS Build 19045.3693 Experience: Windows Feature Experience Pack 1000.19053.1000.0