set函数如何检查两个对象是否不同?

6 投票
1 回答
434 浏览
提问于 2025-04-11 20:24

简单的代码:

>>> set([2,2,1,2,2,2,3,3,5,1])
set([1, 2, 3, 5])

好的,在结果集中没有重复的项。
如果列表中的对象不是整数,而是我自己定义的对象呢?
它是用什么方法来判断这些对象是否不同的呢?我已经为一些对象实现了 __eq__ 和 __cmp__ 方法,但集合(set)似乎并没有使用它们 :\

有没有人知道该怎么解决这个问题?

1 个回答

13

根据集合的文档,集合里的元素必须是可哈希的

一个对象如果有一个在它的生命周期内不会改变的哈希值(这需要一个__hash__()方法),并且可以和其他对象进行比较(这需要一个__eq__()__cmp__()方法),那么这个对象就是可哈希的。那些比较相等的可哈希对象必须有相同的哈希值。

编辑:感谢Roberto,补充了正确的可哈希定义。

撰写回答