例如:
import cProfile
cProfile.run('print(len({i:i for i in range(-10, 10)}))') # 20; no hash shown
和
class Test():
def __init__(self, i):
self.i = i
cProfile.run('print(len({Test(i):i for i in range(-10, 10)}))') # 20; init, no hash
可是:
class Test():
def __init__(self, i):
self.i = i
def __hash__(self):
return self.i
cProfile.run('print(len({Test(i):i for i in range(-10, 10)}))') # 20; init and hash
对于前两个,cProfile
没有显示任何内容表明dict
是hash
。但是,它必须以某种方式比较键,我不知道如何解决这个矛盾。 Python如何知道如何在没有hash
的情况下为前两个存储对象?