为什么抄写字典这么慢?

2024-09-29 17:24:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在解决一个关于代码出现的问题,结果发现我的运行时太糟糕了。我使用了一个有一百万个条目的字典作为一种“链接hashmap”,在这里我可以访问条目,它的值是它指向的下一个条目,所以我有一个O(1)查找时间的链接列表。在某个时候,我不得不抄写这篇口述,这也是我用simple所做的

new_dict = dict(dictionary)

在玩了一会儿代码之后,我删除了这个复制部分,只在一个字典上运行了整个代码。它突然将我的运行速度提高了几个数量级! 为什么我的代码的这一部分会造成这样的瓶颈


Tags: 代码目的列表newdictionary字典链接条目
1条回答
网友
1楼 · 发布于 2024-09-29 17:24:29

这其实有点有趣。dictionary.copy()dict(dictionary)都将在dictionary中创建数据的浅拷贝,但是,其中一个似乎运行得更快

我不太清楚为什么会这样,但我觉得发布我的发现会很有趣。也许有人能在评论中给我一些启示:

import timeit

data = {i: i for i in range(10000)}

print(timeit.timeit(lambda: data.copy(), number=20000))
print(timeit.timeit(lambda: dict(data), number=20000))
0.8178407099999999
3.9644210609999995

如果我不得不猜测的话,我会说dict(dictionary)正在检查每个键值对以重建哈希表,而dictionary.copy()可能只是复制哈希表,跳过了大量所需的工作

我猜这是因为dict(d)内置可以传递给实现dictionary接口的任何对象,而该接口可能不使用相同的哈希表实现,需要在复制数据时重新构造它

相关问题 更多 >

    热门问题