Python集合元素唯一性判定逻辑及对应官方说明查询问询
Python集合元素唯一性判断规则
核心判定逻辑
Python集合对元素去重需要同时满足两个必要条件:
- 两个元素的哈希值相等,即
hash(a) == hash(b) - 两个元素的相等判断返回True,即
a == b
只有两个条件同时成立时,集合才会将二者视为同一个元素,保留先加入集合的那个值,丢弃后加入的重复值。
常见现象解释
1. True与1的去重表现
>>> hash(True) 1 >>> 1 == True True
二者同时满足哈希相等、值相等的条件,所以会被去重,集合中只会保留先出现的那个:
# True先出现,后续的1被丢弃 >>> s1 = {True,1,1,2} >>> s1 {True, 2} # 1先出现,后续的True被丢弃 >>> s2 = {1,1,True,2} >>> s2 {1, 2}
2. False与0的去重表现
>>> hash(False) 0 >>> 0 == False True
二者同样同时满足两个判定条件,所以也遵循先出现保留的规则:
# False先出现,后续的0被丢弃 >>> s3 = {False,0,""} >>> s3 {False, ''} # 0先出现,后续的False被丢弃 >>> s4 = {0,False,(),0,""} >>> s4 {0, '', ()}
3. 空字符串未被去重的原因
空字符串虽然哈希值为0,但和0、False的相等判断都不成立:
>>> hash("") 0 >>> "" == 0 False >>> "" == False False
不满足第二个判定条件,所以哪怕出现哈希冲突,也不会被视为同一个元素,会被正常保留在集合中。
规则说明
该判定逻辑属于Python集合的基础设计规则,官方文档中明确说明:集合仅包含的元素必须为可哈希对象,自动去重的判断标准就是两个元素哈希值相同且相等判断为True。
内容的提问来源于stack exchange,提问作者Raghuraman
相关产品推荐
相关产品推荐

