プログラミング
Python 3.15の速度はどのくらいか?
How Fast is Python 3.15? (blog.miguelgrinberg.com)
要約
著者はPython 3.15のパフォーマンスを、3.10から3.14までの過去バージョンや、PyPy、Node.js、Rustといった他の言語と比較する非公式ベンチマークを実施しました。再帰的なフィボナッチ計算とバブルソートの2つのテストを実行した結果、Python 3.15は3.14と比較してわずかに高速化しましたが、顕著な改善は見られませんでした。特に、JIT(Just-In-Time)コンパイラを搭載したPython 3.15は、標準インタープリタよりも大幅に高速であることが示されました。
全文翻訳
Python 3.15の速度はどのくらいか? 2026年10月5日 10:13:17 UTC
今年も10月になり、新しいPythonリリースを試す時期が来ました(厳密には、私が使用しているのは3.15.0rc3リリースで、公式の3.15リリースはまだ数日先です)。1年前にPython 3.14のパフォーマンスに関する記事で行ったように、今日も私の非公式なPythonベンチマークを再度実行し、Python 3.15を3.10まで遡った過去のインタープリタと比較して共有します。チャートや表に興味がなく、分析だけを読みたい場合は、最後に結論のセクションにジャンプしてください。
私がこのベンチマークを「非公式」と呼んだのはどういう意味でしょうか? プログラミング言語のパフォーマンスを客観的かつ普遍的に測定することは不可能です。できることは、いくつかのプログラムを書いて実行し、そのパフォーマンスを測定することだけです。他のプログラムが同様のパフォーマンス特性を示すか、あるいはそうでないかは、実際には知る方法がありません。このベンチマークの私の意図は、Pythonのバージョン間のパフォーマンスの変化を感じ取ることだけですが、Pythonインタープリタの包括的なパフォーマンスプロファイルを取得しようとしているわけではないことを明確にしたいです。
私のベンチマークでは、fibo.pyとbubble.pyという2つのプログラムを実行します。これらのプログラムは、必要であれば確認できます。最初のプログラムはフィボナッチ数列の数値を計算し、2番目のプログラムはバブルソートアルゴリズムを使用して数値をソートします。これらの2つのプログラムは、2種類のアルゴリズムの代表として選択しました。フィボナッチ計算は再帰を使用して行われますが、これはPythonインタープリタではやや非効率的であることがわかりました。一方、バブルソートは再帰なしで、forループのみを使用します。私のベンチマークがカバーしていない他の種類のプログラムもあります。特に、I/Oバウンドコードはこのベンチマークに含まれていないことに注意してください。最近のPythonバージョンのパフォーマンス改善の一部はマルチスレッディングに関連しているため、各プログラムのマルチスレッド版も作成しました。そのため、合計で4つの異なるテストがあります。
テストマトリックス
完全なテストマトリックスは実際にはかなり複雑です。なぜなら、4つのプログラムバリエーションをすべてのPythonバージョンで実行する必要があり、さらにそれらが持つJITとフリースレッディングの代替手段も考慮する必要があるからです。私はPyPyでもテストを実行するのが好きです。なぜなら、このインタープリタは過去のベンチマーク実行で印象的なパフォーマンスを示しているからです。そして、Pythonのパフォーマンスをより広いエコシステムの中に位置づけるために、これらの2つのプログラムをJavaScript(Node.js)とRustにも移植しました。私が取り組んだ完全なテストマトリックスは以下の通りです。
2つのテストスクリプト
fibo.py: フィボナッチ数値を再帰で計算する
bubble.py: ランダムに生成された数値のリストをソートする(再帰なし)
2つのスレッディングモード
シングルスレッド
4つの並列スレッド
6つのPythonバージョン、および最近のPyPy、Node.js、Rustのバージョン:
CPython 3.10、3.11、3.12、3.13、3.14、3.15
PyPy 3.12
Node 26.3
Rust 1.97
3つのPythonインタープリタ
標準のJust-In-Time(JIT):CPython 3.13+のみ
フリー・スレッディング(FT):CPython 3.13+のみ
私の以前のベンチマークの読者は、Linux対macOSの追加の次元があったことを覚えているかもしれません。過去2回のベンチマーク実行で両者の間に有意な差がなかったため、今回はmacOSのテストを削除することにしました。そのため、すべてのテストはIntel Core i5 CPUを搭載し、Gentoo Linuxを実行している私のLinuxラップトップで実行されました。
このベンチマークの各参加者のパフォーマンスを測定するために使用している方法は、テストプログラムを3回実行し、3回の平均実行時間を取得することです。以下に示す結果の表では、3.15バージョンとの速度差、および意味のある場合は、特定のインタープリタの前のバージョンとの速度差も示しています。速度比較には単純な比率を使用しており、1xは同じ速度、0.5xは半分の速度(または実行に2倍の時間がかかった)、2xは2倍の速さ(または実行に半分の時間がかかった)などを意味します。これが理解しやすいことを願っています。
テスト1:fibo.py、シングルスレッド
始めましょう。最初のテストは、最初の40個のフィボナッチ数値を計算します。
fibo(40) - 1スレッド
時間(秒) 3.15との比較 前バージョンとの比較
3.10 15.9442 0.44x
3.11 9.4058 0.74x 1.70x
3.12 8.8545 0.78x 1.06x
3.13 8.8174 0.79x 1.00x
3.14 7.1659 0.97x 1.23x
3.15 6.9361 1.03x
PyPy 3.12 1.2517 5.54x
Node 26.3 1.3899 4.99x
Rust 1.97 0.0898 77.24x
上記の速度をチャート形式で以下に示します。
これらの結果から、このテストではPython 3.15は3.14よりもわずかに高速であり、おそらく気にするほどではないと推測できます。過去数年間でも観察されたように、PyPy 3.12のパフォーマンスは驚異的で、3.15の5.5倍の速度を記録し、Node.jsをわずかに上回っています。Rustに関しては驚きはありませんが、限界を知っておくことは常に良いことです!
各Pythonリリースを前のバージョンと比較すると、興味深い詳細が見られます。前バージョンに対して大幅なパフォーマンス改善が見られたのは、Python 3.11と3.14だけでした。チャートでは、前のバーと比較してバーの高さが大きく低下しているのがはっきりとわかります。他のリリースは同じ速度を維持するか、わずかな改善しか見られなかったため、全体としては常に進歩がありました。
次の結果セットでは、同じテストでのPythonのJITおよびフリー・スレッディング(FT)リリースの進捗状況を確認できます。これらのPythonインタープリタの代替バージョンは3.13で初めて導入されたため、評価対象のバージョン範囲ははるかに小さいことに注意してください。
fibo(40) - 1スレッド
時間(秒) 3.15との比較 前バージョンとの比較
3.13 JIT 8.8339
3.14 JIT 7.1587 1.23x
3.15 JIT 5.7625 1.20x 1.24x
3.13 FT 12.0368
3.14 FT 7.1185 1.69x
3.15 FT 7.0298 0.99x 1.01x
これらの結果を含むチャートを以下に示します。
ここから本当に興味深いのは、3.15インタープリタのJITが、同じテストの標準インタープリタよりも高速だったことです。これは過去数年間では見られませんでした。そして1.20倍の速度増加は無視できるものではなく、これは非常にエキサイティングです!フリー・スレッディングに関しては、このテストはシングルスレッドであるため、あまり期待することはできません。しかし、フリー・スレッディング・インタープリタのパフォーマンスは、3.14のものとほぼ同じであると言えます。
テスト2:bubble.py、シングルスレッド
次に2番目のテストを見てみましょう。10,000個のランダムな数値をソートするように設定された、シングルスレッドのバブルソートテストの表とチャートを以下に示します。
bubble(10000) - 1スレッド
時間(秒) 3.15との比較 前バージョンとの比較
3.10 3.9918 0.49x
3.11 2.6237 0.75x 1.52x
3.12 2.7341 0.72x 0.96x
3.13 2.833 0.70x 0.97x
3.14 2.0575 0.96x 1.38x
3.15 1.9716 1.04x
PyPy 3.12 0.1073 18.37x
Node 26.3 0.0643 30.66x
Rust 1.97 0.0391 50.42x
前のテストと同様に、ここでも3.15は3.14と比較して非常にわずかなパフォーマンス改善が見られます。そして、Pythonの最近のリリースで本当にパフォーマンスに影響を与えたのは、3.11と3.14の2つであることが再びわかります。このテストでは、いくつかのリリースでわずかな後退さえ見られます。PyPyは引き続き非常に高速でしたが、このテストではNode.jsの方が高速でした。
次の表とチャートは、PythonインタープリタのJITおよびフリー・スレッディング版の結果を示しています。
bubble(10000) - 1スレッド
時間(秒) 3.15との比較 前バージョンとの比較
3.13 JIT 2.5887
3.14 JIT 2.3624 1.10x
3.15 JIT 1.5435 1.28x 1.53x
3.13 FT 4.1888
3.14 FT 2.7248 1.54x
3.15 FT 2.6808 0.74x 1.02x
これは最初のテストと同じ全体像を示しています。3.15 JITは、通常のインタープリタと比較して、再び印象的な1.28倍の速度向上を示しました。フリー・スレッディング版は標準インタープリタと比較してパフォーマンスの低下を示していますが、3.14インタープリタでも同様の低下が見られたため、これは後退ではありません。前述したように、このテストはシングルスレッドであるため、フリー・スレッディングが役立つようなアプリケーションではないため、これはあまり重要ではありません。