为何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
相关产品推荐
相关产品推荐

