range()
の高速な動作の理由
Python
3では、range()
は巨大な範囲でも高速に動作します。これは、range()
がすべての数値をメモリに格納するのではなく、スタート、ストップ、ステップの情報だけを保持し、要素を必要に応じて動的に計算するためです。このため、1000000000000000 in range(1000000000000001)
のような大きな範囲でも瞬時に結果を返せます。
内部の最適化
range()
オブジェクトは、数学的な計算を使用して、数値がその範囲内にあるかどうかを確認します。このため、要素の有無を確認する操作は定数時間に近い性能を持ちます。
num = 1000000000000000
print(num in range(1000000000000001)) # 出力: True
メモリ効率
range()
は数値を動的に生成するため、メモリ使用量が少なく、非常に大きな範囲でも効率的に処理できます。
まとめ
Python
3のrange()
は、数学的計算に基づいた最適化により、大規模な範囲を高速に処理します。また、ジェネレーターではなくシーケンスとして動作するため、リストと同様の操作も可能です。