このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】不要な変数の削除

不要な変数の削除

 Pythonプログラミングにおいて、不要な変数の削除はメモリ管理やコードの可読性を向上させるために重要な操作です。特に大規模なプログラムや長時間実行されるアプリケーションでは、不要な変数を適切に削除することで、メモリの効率的な使用とパフォーマンスの最適化が図れます。ここでは、Pythonにおける不要な変数の削除方法について、del文の基本的な使い方とその応用例を中心に解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.不要な変数の削除とは

 不要な変数の削除とは、プログラムの実行中にもはや必要とされなくなった変数をメモリから解放する操作です。Pythonでは、ガベージコレクション(自動メモリ管理)により、参照されなくなったオブジェクトは自動的にメモリから削除されます。しかし、特定の状況では手動で変数を削除することが推奨される場合があります。

ポイント

  • 不要な変数を削除することで、メモリ使用量を抑え、プログラムの効率を向上させる。
  • 大規模なデータ処理や長時間実行されるプログラムでは、メモリリークを防ぐために重要。

2.del文の基本

 Pythonでは、del文を使用して変数を削除することができます。delは「delete」の略で、指定した変数やオブジェクトの参照を解除します。

2.1. 変数の削除方法

【構文】

del 変数名

サンプルプログラム

# 変数aに値を代入
a = 50
print(a)  # 出力: 50

# 変数aを削除
del a

# 変数aにアクセスしようとするとエラーが発生
print(a)  # NameError: name 'a' is not defined

実行結果

50
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[1], line 9
      6 del a
      8 # 変数aにアクセスしようとするとエラーが発生
----> 9 print(a)

NameError: name 'a' is not defined

解説

  • 変数a50を代入し、print(a)で値を表示します。
  • del aにより、変数aが削除されます。
  • 削除後にprint(a)を実行すると、aが定義されていないためNameErrorが発生します。

2.2. 複数の変数を同時に削除

del文では、カンマ(,)を使用して複数の変数を一度に削除することが可能です。

【構文】

del 変数名1, 変数名2, ...

サンプルプログラム

# 変数x, y, zに値を代入
x = 10
y = 20.5
z = "Python"

# 変数xとzを同時に削除
del x, z

# 変数xとzにアクセスしようとするとエラーが発生
print(x)  # NameError: name 'x' is not defined
print(z)  # NameError: name 'z' is not defined

# 変数yはまだ存在する
print(y)  # 出力: 20.5

実行結果

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[2], line 10
      7 del x, z
      9 # 変数xとzにアクセスしようとするとエラーが発生
---> 10 print(x)  # NameError: name 'x' is not defined
     11 print(z)  # NameError: name 'z' is not defined
     13 # 変数yはまだ存在する

NameError: name 'x' is not defined

解説

  • 変数x, y, zにそれぞれ異なる型の値を代入します。
  • del x, zにより、変数xzが削除されます。
  • 削除された変数xzにアクセスするとNameErrorが発生しますが、yは削除されていないため、エラーとなる行をコメントアウトすると、正常に値が表示されます。

3.del文の応用例

 del文は、単に変数を削除するだけでなく、リストの要素やオブジェクトの属性を削除する際にも使用できます。

3.1. リストの要素の削除

サンプルプログラム

# リストの作成
fruits = ["apple", "banana", "cherry", "date"]
print(fruits)  # 出力: ['apple', 'banana', 'cherry', 'date']

# インデックス1の要素を削除('banana')
del fruits[1]
print(fruits)  # 出力: ['apple', 'cherry', 'date']

実行結果

['apple', 'banana', 'cherry', 'date']
['apple', 'cherry', 'date']

解説

  • リストfruitsに4つの果物名を格納します。
  • del fruits[1]により、インデックス1の'banana'が削除されます。
  • 削除後のリストには'banana'が含まれなくなります。

3.2. オブジェクトの属性の削除

サンプルプログラム

# クラスの定義
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

# オブジェクトの作成
person = Person("Alice", 30)
print(person.name)  # 出力: Alice
print(person.age)   # 出力: 30

# 属性ageを削除
del person.age

# 削除された属性にアクセスしようとするとエラーが発生
print(person.age)  # AttributeError: 'Person' object has no attribute 'age'

実行結果

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[4], line 16
     13 del person.age
     15 # 削除された属性にアクセスしようとするとエラーが発生
---> 16 print(person.age)

AttributeError: 'Person' object has no attribute 'age'

解説

  • クラスPersonを定義し、nameageの属性を持つオブジェクトを作成します。
  • del person.ageにより、オブジェクトpersonage属性が削除されます。
  • 削除後にperson.ageにアクセスするとAttributeErrorが発生します。

4.不要な変数の削除が有効な場面

不要な変数の削除は、以下のような場面で特に有効です。

  • 大規模データの処理: 一時的に使用した変数を削除することで、メモリの使用量を抑制。
  • ループ内での使用: ループの各回で使用する変数を削除することで、不要な参照を解除。
  • リソースの解放: ファイルやネットワーク接続などのリソースを管理する変数を削除し、リソースを早期に解放。

ポイント

  • 不要な変数を削除することで、プログラムのメモリ使用量を最適化できる。
  • 明示的な削除により、コードの意図が明確になり、保守性が向上する。

5.del文の注意点

del文を使用する際には、以下の点に注意が必要です。

5.1. 誤って必要な変数を削除しないようにする

一度削除した変数にアクセスするとエラーが発生するため、削除する前に本当に不要かを確認する。

5.2. オブジェクトの参照が他にも存在する場合

 他の変数やオブジェクトが同じオブジェクトを参照している場合、del文で削除しても他の参照が存在する限りオブジェクト自体はメモリに残る。

サンプルプログラム

# 同じオブジェクトを参照する変数
a = [1, 2, 3]
b = a

# 変数aを削除
del a

# 変数bはまだオブジェクトを参照している
print(b)  # 出力: [1, 2, 3]

実行結果

[1, 2, 3]

5.3. del文は値そのものを削除するのではなく、変数とオブジェクトの参照を解除する

同じオブジェクトを他の変数が参照している場合、オブジェクト自体は削除されません。

まとめ

ここでは、Pythonにおける不要な変数の削除について学びました。

  • del文の基本: 変数を削除するための基本的な構文とその使い方を理解しました。
  • 複数の変数の削除: カンマを用いて複数の変数を一度に削除する方法を習得しました。
  • 応用例: リストの要素やオブジェクトの属性を削除する具体的な例を通じて、del文の応用範囲を確認しました。
  • 有効な場面と注意点: 不要な変数を削除することで得られるメリットと、del文を使用する際の注意点について理解しました。

 これらの知識を基に、Pythonプログラム内で不要な変数を適切に管理し、メモリの効率的な使用とコードの保守性を向上させることができます。次のコンテンツでは、数値を使った計算について詳しく解説していきますが、その前に「開発環境:仮想環境へのNumpyライブラリのインストール」を行い、環境を整えていきます。ぜひ、実際にコードを書きながら、変数削除の実践を通じて理解を深めてください。