前回の記事で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.11 | Python 3.12 | Python 3.13 | 
| リスト内包表記 | 0.089秒 | 0.058秒 | 0.044秒 | 
| forループとappend | 0.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では、ライブラリの依存や安定性の問題で、バージョンアップすることを敬遠されがちですが、最新のバージョンを利用することで、性能面が上がることを確認できました。
制作するものや状況によって、パフォーマンス的に困っている方は、最新のバージョンで制作することも視野に入れてはどうでしょうか?
この記事が、あなたの役に立てば幸いです!
 





コメント