在 Python 中,set 是一个无序的、不重复的元素集合。当你试图将一个不可哈希(unhashable)类型的对象添加到 set 时,Python 会抛出一个 TypeError 异常。
不可哈希类型主要包括:
__hash__()
和 __eq__()
方法要解决这个问题,你可以采取以下方法之一:
my_list = [1, 2, 3]
my_set = set(tuple(my_list))
__hash__()
和 __eq__()
方法。这样,Python 就可以计算对象的哈希值并进行比较。class MyClass:
def __init__(self, value):
self.value = value
def __hash__(self):
return hash(self.value)
def __eq__(self, other):
if isinstance(other, MyClass):
return self.value == other.value
return False
my_set = set()
obj1 = MyClass(1)
obj2 = MyClass(2)
my_set.add(obj1)
my_set.add(obj2)