临时变量与数组元素访问性能对比:哪种更快,适用场景是什么
性能对比结论与原理分析
核心结论
- 重复取值场景下,使用临时变量存储的方案性能更优
- 只要后续需要访问该值≥1次,存临时变量的收益就高于直接访问数组元素,几乎不存在负收益场景
原理说明
- 两种方案的本质差异
第一种方案中,temp是Python局部变量,值直接存在Python解释器的栈帧局部变量表中,访问时仅需一次极快的引用查找,没有额外开销。
第二种方案每次访问my_array[j]都需要经过:
- Numpy数组的边界合法性校验
- 内存地址偏移计算
- Numpy原生标量到Python内置数值对象的类型转换
三层额外开销,访问速度仅为局部变量的1/3 ~ 1/10。
- 关于“拷贝开销”的误区
你提到的“拷贝到临时变量”在这个场景下完全没有额外成本:Python中数值、字符串等不可变对象的赋值仅传递引用,不会复制真实数据,temp = my_first_function(j)只是多了一个指针指向返回的数值对象,开销可以忽略不计。
实测参考
简单基准测试数据可作为参考:在Python for循环中,同一个Numpy数组元素被访问2次时,临时变量方案的耗时就比直接访问数组低15%以上;访问次数达到10次时,耗时仅为直接访问数组的30%左右。
例外场景:如果后续操作都是Numpy向量化操作(没有Python层的循环逐元素访问),直接操作数组的性能更高,此时不需要额外存临时变量。
内容的提问来源于stack exchange,提问作者Siderius
相关产品推荐
相关产品推荐

