无论python中的字典还是Java中的哈希映射,密钥都可以是节点类的实例。
但是当我阅读python教程时,它说:
键在字典中是唯一的,而值可能不是。字典的值可以是任何类型,但键必须是不可变的数据类型,如字符串,数字或元组。
感到困惑! #抱歉,我的表情很差!:(
示例代码为:
class RandomListNode:
def __init__(self, x):
self.label = x
self.next = None
self.random = None
dict = {}
node1 = RandomListNode(10)
node2 = RandomListNode(5)
dict[node1] = node2
print dict[node1].label #5
要点: Hashable(哈希值不会更改)或不可变对象可以是键值。 参考: https://docs.python.org/2/glossary.html#term-hashable
答案 0 :(得分:4)
默认情况下,类的实例是唯一的,因此可以用作键。
实际约束是类中存在__hash__
方法。如果您添加自定义__eq__
方法,则还必须添加自己的__hash__
方法,以便仍然可以考虑"不可变的" - 但请确保您的哈希值不随变异而变化,否则您的参赛作品将无法从set
和dict
检索到。