問題一覧に戻る
上級パフォーマンス最適化
問題115: リスト vs ジェネレータ
リストは全ての要素をメモリに保持しますが、ジェネレータは必要に応じて値を生成するため、メモリ効率が大幅に異なります。大量のデータを扱う場合、ジェネレータはメモリ使用量を削減できますが、要素への再アクセスはできません。用途に応じて適切に選択することが重要です。
# リスト vs ジェネレータ
import sys
# リストを作成
numbers_list = [x * 2 for x in range()]
print(f"List size: {sys.getsizeof(numbers_list)} bytes")
# ジェネレータを作成
numbers_gen = (x * 2 for x in (10000))
print(f"Generator size: {sys.getsizeof()} bytes")
# 使用方法を比較
print(f"First 3 from list: {numbers_list[:3]}")
print(f"First 3 from gen: {[next(numbers_gen) for _ in range(3)]}")