【发布时间】:2019-08-01 18:40:22
【问题描述】:
我正在使用 Python 3.6 开发程序
我有一个问题:如果我在同一个对象上使用确定性hash 函数(来自语言的标准库),则导致输出(运行后)的字符串对于某些运行是不同的!
例如:
class Generic:
def __init__(self, id, name, property):
self.id = id
self.name = name
self.property = property
def main():
my_object = Generic(3,'ddkdjsdk','casualstring')
print(hash(my_object))
我希望输出始终相同(确定性),但不幸的是控制台上出现了不同的字符串: 8765256330262、-9223363264515786864、-9223363262437648366等... 为什么会发生这种情况?我想在整个应用程序中保证此功能的确定性!我该如何解决这个问题?
【问题讨论】:
-
默认的
hash是对象的内存地址,与这三个属性没有任何关系。如果您想要基于对象的实际属性的特定、确定性哈希,请实施__hash__。 -
What does hash do in python? 的可能重复项“请注意,一个值的哈希值只需要与 Python 的一次运行相同。在 Python 3.3 中,它们实际上会随着 Python 的每次新运行而改变”
-
这里有一个关于编写哈希方法的好帖子:How to implement a good hash function in python
标签: python object hash deterministic