【发布时间】:2020-02-25 20:40:21
【问题描述】:
我有这段代码:
import time
d = dict()
for i in range(200000):
d[i] = "DUMMY"
start_time = time.time()
for i in range(200000):
for key in d:
if len(d) > 1 or -1 not in d:
break
del d[i]
print("--- {} seconds ---".format(time.time() - start_time))
为什么这需要大约 15 秒才能运行?
但是,如果我注释掉 del d[i] 或内部循环,它会在 ~0.1 秒内运行。
【问题讨论】:
-
更奇怪的是,如果我删除
for key in d:循环,它会回到几分之一秒! -
嗯,Raymond Hettinger 和其他核心开发人员有时会回答有关此标签的问题,所以希望他们能来...
-
啊,这是第一次在迭代器上调用
next需要时间;用di = iter(d); next(di)之类的东西替换循环,运行时间回到 15 秒。 -
我可以用 2.7 重现,所以这看起来与版本无关..
-
看起来
ma_values路径用于键共享字典,通常用于对象属性字典(将它们的键放入所有实例共享的对象中),而不是普通字典。
标签: python performance dictionary