【发布时间】:2019-11-26 22:43:11
【问题描述】:
假设我们有一个这样的自定义节点类:
class Node:
def __init__(self, val, next, random):
self.val = val
self.next = next
self.random = random
我有一个节点对象,我想将它用作字典的键。
我的理解是,一个对象应该是不可变的和可散列的,才能可靠地用作字典键,因为可变对象可能导致散列值发生变化,而该对象是可变的。
我知道 python 确实允许将自定义可变对象用作字典键,它是如何工作的?
更新:引用的链接不涉及自定义对象的可变性方面。它们只是提供了一种方法来覆盖散列函数的默认实现。此问题应重新打开,因为它与引用的“重复”问题不同。
答案:自定义可变对象的哈希方法的默认实现使用identity,它保证在对象的生命周期内是唯一且恒定的。一个可变的自定义对象不应该覆盖散列函数的默认实现。下面提供更详细的答案。
【问题讨论】:
-
它部分回答了我的问题,因为它采用了一个非常具体的示例,其中类只有一个不可变的“str”类型属性。我将回答这个问题,因为我想出了如何将具有多个属性的类对象用作字典的键,即使它具有可变的属性。
-
@Anatolii 恐怕这个问题必须打开,因为参考链接不是我问题的准确答案。能做到吗?
-
当然,但是,在您的问题中,您应该解释为什么这些链接不是正确的答案。否则,您将无法获得足够的支持(除了我之外)来重新提出问题。
-
我当时投票决定重新提出您的问题。
标签: python-3.x hashmap hashtable immutability