Tips

今日の開発Tips(2025-07-04)

Pythonで大量のデータを処理する際に、メモリ消費を削減するために、ジェネレータを使用しましょう。ジェネレータは、一度にすべてのデータをメモリに読み込むのではなく、必要な時に必要なデータだけを生成するため、メモリ効率が大幅に向上します。特に、巨大なファイルの処理や、メモリに収まらないサイズのデータセットを扱う際に有効です。

Python ジェネレータによるメモリ効率化

リスト内包表記や通常のループで大量のデータを処理すると、一度に全データがメモリに読み込まれ、メモリ不足エラーが発生する可能性があります。ジェネレータを使うことで、データを逐次的に処理でき、メモリ使用量を大幅に削減できます。

# メモリ消費の多い方法 (リスト内包表記)
large_data = range(10000000)  # 巨大なデータ
squared_data = [x**2 for x in large_data]  # メモリに一度に読み込む

# メモリ効率の良い方法 (ジェネレータ)
def squared_generator(data):
    for x in data:
        yield x**2

large_data = range(10000000)
squared_generator_data = squared_generator(large_data)

# 必要な時にだけ値を生成し消費する
for value in squared_generator_data:
    # value を処理する
    pass

注意点:

ジェネレータはイテレータなので、一度生成された値は再利用できません。 必要なデータに繰り返しアクセスする場合は、リストなどに格納する必要があります。

おすすめポイント:

大規模データ処理において、メモリ不足エラーを回避し、プログラムの安定性を向上させるために、ジェネレータの活用を検討しましょう。 処理速度が速くなるわけではないことに注意し、必要に応じて適切なデータ構造を選択することが重要です。