“Python 3.15 比 3.14 快吗” 是升级前最常被问的问题,但答案取决于怎么构建。这篇在本机用 Homebrew 的 3.14.9 和 3.15.0 对 18 个测试各独立做两遍,交替运行取最小值,并如实列出两个构建的编译选项差异:这是在比较两个包,不是在比较两个语言版本。
Python 3.14.9:JIT 可用 = False,自由线程构建(Py_GIL_DISABLED) = 0,编译器 clang
configure 选项(去掉路径类):--enable-ipv6 --enable-loadable-sqlite-extensions --enable-optimizations --with-dtrace --with-lto --with-tail-call-interp --without-ensurepip
Python 3.15.0:JIT 可用 = False,自由线程构建(Py_GIL_DISABLED) = 0,编译器 clang
configure 选项(去掉路径类):--enable-ipv6 --enable-loadable-sqlite-extensions --enable-optimizations --with-dtrace --with-lto --without-ensurepip
只有 3.14.9 有的选项:--with-tail-call-interp;只有 3.15.0 有的选项:无两个 Homebrew 包都没有 JIT、都不是自由线程构建;3.14.9 带 --with-tail-call-interp,3.15.0 不带。
3.14 ms 3.15 ms 比值1 比值2 fib 5.01 6.18 1.23 1.23 loop 43.09 44.62 1.04 1.04 method 14.36 15.95 1.11 1.13 gen 23.44 24.24 1.03 1.04
函数调用密集的 fib 和方法调用 3.15 这个构建慢一些;循环和生成器持平。
3.14 ms 3.15 ms 比值1 比值2 listcomp 14.79 14.58 0.99 1.00 dict 37.15 36.28 0.97 0.99 sort 34.13 35.34 1.02 1.05 str 7.50 7.76 1.05 1.03 set 12.49 12.93 1.01 1.05 collections 6.00 6.33 1.00 1.06
列表推导、字典、排序、字符串、集合、Counter 基本持平。
3.14 ms 3.15 ms 比值1 比值2 json_dumps 15.24 13.40 0.89 0.86 json_loads 17.06 16.05 0.94 0.94 regex 1.90 1.83 0.97 0.95 pickle 11.95 12.51 0.98 1.07 sqlite 24.30 25.53 1.01 1.05 hash 2.26 2.31 1.02 1.01
json.dumps 和 json.loads 两遍都是 3.15 更快;pickle、sqlite3 两遍结论不一致。
3.14 ms 3.15 ms 比值1 比值2 bigint 11.92 11.90 1.00 1.00 asyncio 62.08 64.71 1.01 1.04 汇总:18 个测试的几何平均比值:第 1 遍 1.01,第 2 遍 1.03;两遍都是 3.15 快 5% 以上的有 2 个(json_dumps, json_loads);两遍都是 3.15 慢 5% 以上的有 2 个(fib, method);其余 14 个两遍结论不一致或差在 ±5% 以内(loop, gen, listcomp, dict, sort, str, set, regex, pickle, sqlite, hash, bigint, collections, asyncio)
几何平均比值 1.01 和 1.03,整体持平,不要指望升级本身带来整体加速。