提问人:Custal 提问时间:6/27/2022 更新时间:6/27/2022 访问量:100
如果哈希值是从唯一的对象 ID 计算的,那么在 Python 中使用可变对象作为字典键可能会出现什么问题?
What are the possible problems with using a mutable object as a dictionary key in Python if the hash is calculated from the unique object ID?
问:
在 Python 中,只要定义了哈希函数,就可以将可变对象用作字典键(例如用户定义的类)。默认情况下,用户定义的类使用对象 ID 的函数作为其哈希值,对于给定的 Python 实例,哈希值保证为 unqiue。我看到很多帖子询问是否可以使用可变对象作为字典键,是的,但我的问题是你应该使用可变对象作为字典键吗?这样做可能会出现哪些问题?
我感兴趣的具体上下文是当使用字典将对象映射到其他对象时,其中键引用一个对象,值是您要映射到的另一个对象。使用字符串 ID 作为键似乎是最明显的方法,但是在大多数情况下,会出现这种模式,然后我使用字符串 ID 从其他地方(可能是另一个字典)获取实际对象。与其使用字符串 ID 作为键,为什么不去掉中间人,而只使用对象本身作为键呢?
我能想到的这种方法的唯一问题是,你牺牲了在对象上定义一个相等的方法,该方法通过对象内容而不是对象 id 进行比较。然而,就像 Python 中的许多事情一样,仅仅因为你可以做某事并不意味着你应该这样做,所以我对这种方法是否有任何其他潜在的陷阱感兴趣,我应该注意。
答: 暂无答案
评论