gpt4 book ai didi

python - 为什么迭代 dict 这么慢?

转载 作者:行者123 更新时间:2023-12-03 13:56:07 25 4
gpt4 key购买 nike

我有一个脚本,可以删除很多 dict 并最终对其进行迭代。
我设法将其简化为一个简单的基准:

> py -m timeit -s "a = {i:i for i in range(10000000)};[a.pop(i) for i in range(10000000-1)]" "next(iter(a))"
10 loops, best of 5: 30.8 msec per loop
为什么在删除所有以前的值后迭代单个键变得很慢?

最佳答案

从 3.6 开始,Python 字典使用内部哈希表和 entries 数组。 .
当从字典中删除一个键时,它的条目实际上在数组中被替换为 dummy value将条目标记为已删除。
在迭代时,它会一个一个地跳过所有这些虚拟值,直到找到下一个真正的项目。
这就是为什么如果你跳过第一个值,只删除其余的值,你会看到迭代与迭代单个项目字典一样快:

> py -m timeit -s "a = {i:i for i in range(10000000)};[a.pop(i) for i in range(1,10000000-1)]" "next(iter(a))"
1000000 loops, best of 5: 219 nsec per loop
更多关于内部字典结构的信息,可以查看 this wonderful answer .

关于python - 为什么迭代 dict 这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65895767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com