You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python中创建集合{1,2}比{1,2,3}耗时更长?

集合创建性能疑问:为何{1,2}比{1,2,3}更慢?

基准测试结果

{1,2}    86.4 ns
{1,2,3}  79.6 ns
{1,2}    86.7 ns
{1,2,3}  79.7 ns
{1,2}    85.9 ns
{1,2,3}  80.1 ns

Python: 3.13.0 (main, Nov  9 2025, 11:53:23) [GCC 15.2.1 20250813]

问题

为何创建集合{1,2}比{1,2,3}速度更慢?{1,2,3}不是需要完成同样操作且额外多添加一个元素吗?

基准测试脚本

import timeit, sys

for s in ['{1,2}', '{1,2,3}'] * 3:
    t = min(timeit.repeat(s)) * 1e3
    print(f'{s:7}  {t:4.1f} ns')

print('\nPython:', sys.version)

解答

这个反直觉的现象源于CPython集合初始化的内部实现细节:

  • 哈希表容量预分配:Python集合基于哈希表实现,创建时会预分配「大于元素数量的最小2次幂」作为初始容量。{1,2}的初始容量是4,{1,2,3}的初始容量是8。虽然8的内存更大,但内存分配的固定开销在小集合中占比差异不大,而3个元素的批量插入逻辑反而比2个元素的逐个插入路径更高效。

  • 字节码执行优化:在CPython 3.13版本中,BUILD_SET字节码处理不同元素数量时存在细微差异。当元素数量≥3时,解释器触发了更高效的批量哈希计算与插入逻辑;而元素数量为2时仍走通用的逐个插入流程,固定初始化开销的占比更高,最终导致总耗时略长。

  • 硬件层面波动:两者的耗时差异仅约6ns,已经接近CPU单个时钟周期的量级,缓存命中、指令流水线等硬件因素的波动也可能对结果产生影响。

内容的提问来源于stack exchange,提问作者Kelly Bundy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 04:34:50