您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

何时计算python对象的哈希值,为什么-1的哈希值不同?

何时计算python对象的哈希值,为什么-1的哈希值不同?

通常可以在每次使用哈希时进行计算,因为您可以很容易地检查一下自己(请参阅下文)。当然,任何特定对象都可以自由缓存其哈希。例如,cpython字符串执行此操作,但元组不执行此操作(例如,出于原因,请参见此拒绝的错误报告)。

哈希值-1表示cpython中有错误。这是因为C没有异常,因此它需要使用返回值。当Python对象__hash__返回-1时,cpython实际上会将其静更改为-2。

你自己看:

class HashTest(object):
    def __hash__(self):
        print('Yes! __hash__ was called!')
        return -1

hash_test = Hashtest()

# All of these will print out 'Yes! __hash__ was called!':

print('__hash__ call #1')
hash_test.__hash__()

print('__hash__ call #2')
hash_test.__hash__()

print('hash call #1')
hash(hash_test)

print('hash call #2')
hash(hash_test)

print('Dict creation')
dct = {hash_test: 0}

print('Dict get')
dct[hash_test]

print('Dict set')
dct[hash_test] = 0

print('__hash__ return value:')
print(hash_test.__hash__())  # prints -1
print('Actual hash value:')
print(hash(hash_test))  # prints -2
python 2022/1/1 18:29:14 有408人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶