Pythonをバージョン別でパフォーマンス比較してみた

前回の記事でPython 3.13のJITコンパイルによるパフォーマンス比較について記事を書きました。その際、Python 3.11から3.13へのバージョンアップで、目覚ましい速度向上が見られたことに驚いたので、今回は、3.11、3.12、3.13の3つのバージョンで、いくつかの一般的なタスクのパフォーマンスを比較してみたいと思います。

前回のPython 3.13のJITコンパイルによるパフォーマンス比較の記事はこちらです。

テスト環境

  • OS: Windows 11
  • CPU: Intel(R) N100
  • メモリ: 16GB

テスト内容

以下のタスクを実行し、各バージョンの実行時間を比較します。

  • リスト内包表記
  • forループとappendによるリスト作成
  • 文字列連結 (joinと+)
  • 浮動小数点演算
  • 辞書操作
  • ソート
  • 再帰関数

検証に使用したプログラムは以下の通りです。

import time
import random
import math
import sys

def list_comprehension_test():
    return [i**2 for i in range(500000)]

def list_append_test():
    list_append = []
    for i in range(500000):
        list_append.append(i**2)
    return list_append

def string_join_test():
    strings = [str(i) for i in range(50000)]
    return "".join(strings)

def string_plus_test():  # 非推奨
    slow_joined_string = ""
    for i in range(50000):
        slow_joined_string += str(i)
    return slow_joined_string

def float_operation_test():
    total = 0
    for i in range(500000):
        total += math.sqrt(i) * math.sin(i)
    return total

def dict_test():
    my_dict = {i: i * 2 for i in range(50000)}
    for i in range(50000):
        value = my_dict[i]
    return my_dict

def sort_test():
    random_list = [random.randint(0, 100000) for _ in range(50000)]
    return sorted(random_list)

def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

def recursion_test():
    return fibonacci(25)  # 再帰の深さを増やす


def measure_execution_time(func, name):
    start_time = time.time()
    result = func()
    end_time = time.time()
    elapsed_time = end_time - start_time
    print(f"{name}: {elapsed_time:.6f} 秒")
    return result


if __name__ == "__main__":
    print(f"Python version: {sys.version}")

    measure_execution_time(list_comprehension_test, "リスト内包表記")
    measure_execution_time(list_append_test, "forループとappend")
    measure_execution_time(string_join_test, "文字列連結 (join)")
    measure_execution_time(string_plus_test, "文字列連結 (+)")
    measure_execution_time(float_operation_test, "浮動小数点演算")
    measure_execution_time(dict_test, "辞書操作")
    measure_execution_time(sort_test, "ソート")
    measure_execution_time(recursion_test, "再帰関数")

パフォーマンス結果

各バージョンの実行時間は以下の通りです。

タスクPython 3.11Python 3.12Python 3.13
リスト内包表記0.089秒0.058秒0.044秒
forループとappend0.149秒0.050秒0.046秒
文字列連結 (join)0.017秒0.014秒0.006秒
文字列連結 (+)0.275秒0.005秒0.009秒
浮動小数点演算0.263秒0.109秒0.107秒
辞書操作0.014秒0.018秒0.010秒
ソート0.162秒0.036秒0.039秒
再帰関数0.152秒0.019秒0.015秒

まとめ

Python 3.12以降では、3.11と比べて多くのタスクで処理速度が劇的に向上していることが分かりました。また少しですが、3.12->3.13でも性能が上がっていることも確認できました。

Pythonでは、ライブラリの依存や安定性の問題で、バージョンアップすることを敬遠されがちですが、最新のバージョンを利用することで、性能面が上がることを確認できました。
制作するものや状況によって、パフォーマンス的に困っている方は、最新のバージョンで制作することも視野に入れてはどうでしょうか?

この記事が、あなたの役に立てば幸いです!

にいやん

出身 : 関西 居住区 : 関西 職業 : 組み込み機器エンジニア (エンジニア歴13年) 年齢 : 38歳(2022年11月現在) 最近 業務の効率化で噂もありPython言語に興味を持ち勉強しています。 そこで学んだことを記事にして皆さんとシェアさせていただければと思いブログをはじめました!! 興味ある記事があれば皆さん見ていってください!! にほんブログ村