dict.__getitem__ 在字符串上的性能

0 投票
1 回答
685 浏览
提问于 2025-04-16 19:08

我在一个自己实现的文件系统中使用了一个 dict 来存储缓存的路径。这个 dict 中的所有键都是字符串。经过一些性能分析,我发现查找这个字典的速度很慢,成了瓶颈。我了解到 dict 是经过高度优化的。不过,cProfile 的精确度并没有显示字典查找代码的内部工作情况。

有没有什么原因导致在 Python 3 中字符串的查找会这么慢呢?我能做些什么来解决这个问题或者提高性能吗?

1 个回答

0

我觉得有必要看看源代码,了解是什么造成了差异。最近我尝试把Python2的代码转换成Python3,但发现查找的速度还是很慢,Python2的速度大约比Python3快30%。这里不是实际的代码,而是一个示例类,用来找出问题到底出在哪里。示例代码:

"""
python3
"""
from time import time
from random import randint

class Wooaah:

    def __init__(self):
        self.length=100000
        self.a=dict()
        self.b=dict()
        self.count=int()
        self.s=float()
        self.e=float()

    def dummy_data(self):
        for i in range(self.length):
            self.a[i]=time()
            self.b[i]=time()

    def setod(self):
        self.s=time()
        for i in self.a:
            if self.b.get(i):
                self.count+=1
        self.e=time()

a=Wooaah()
a.dummy_data()
a.setod()
print(a.count)
print(a.e-a.s)

撰写回答