Python中变量赋值与索引访问的性能差异及异构结构阈值分析
Python列表访问与变量赋值的性能对比问题
核心问题
- 问题1:赋值操作比索引访问的速度慢/快多少?
- 问题2:在Python中,当重复访问列表元素时,何时重新声明变量的方式比直接访问元素更高效?
实验示例
使用如下测试列表:
import time fruits = ["orange", "banana", "strawberry", "apple"]
执行两组测试代码:
第一组:每次循环直接访问列表元素
timesToRun = 1000000 timesToAccess = 100 start_time = time.time() for x in range(timesToRun): for y in range(timesToAccess): tempFruit = fruits[2] # 直接访问列表元素 print("--- %s seconds ---" % (time.time() - start_time))
第二组:先将列表元素赋值给变量,再循环访问变量
start_time = time.time() for x in range(timesToRun): myFruit = fruits[2] # 声明新变量 for y in range(timesToAccess): tempFruit = myFruit # 访问变量 print("--- %s seconds ---" % (time.time() - start_time))
实验结果
- 当
timesToAccess=100时:直接访问耗时5.268802165985107秒,变量访问耗时4.507154226303101秒,变量访问方式更快 - 当
timesToAccess=1时:直接访问耗时1.948554277420044秒,变量访问耗时2.1312568187713623秒,直接访问方式更快
延伸疑问
- 上述性能反转的阈值是多少?
- 针对字典或NumPy数组,该性能结论是否不同?
- 声明新变量比直接访问列表慢多少?
内容的提问来源于stack exchange,提问作者Apophis
相关产品推荐
相关产品推荐

