咨询Python集合中布尔值与整数共存时的输出异常原因
集合中布尔值与整数的去重逻辑
先看你给出的测试代码与输出结果:
测试代码:
# case 1 s = {1, True} print(s) # case 2 s = {2, True} print(s) # case 3 s = {1, False} print(s) # case 4 s = {0, False} print(s)
输出结果:
{1} {True, 2} {False, 1} {0}
核心原因
Python里的布尔类型bool是整数类型int的子类,True本质等价于整数1,False等价于整数0——你可以直接在交互环境里验证:True == 1返回True,False == 0也返回True。
而集合的核心特性是元素唯一,判断两个元素是否重复的标准是:两者哈希值相同,且a == b返回True。
逐个分析测试用例
- case 1:
1和True满足1 == True,哈希值也一致,集合会判定为同一个元素,因此只保留其中一个(这里显示1,具体保留哪个取决于内部存储逻辑,结果只要是二者其一都合理) - case 2:
2和True不相等(2 != True),属于两个独立元素,所以都会被保留 - case 3:
1和False不相等(1 != False),因此两个元素都能留在集合里 - case 4:
0和False满足0 == False,哈希值相同,集合会去重,只保留其中一个(这里显示0)
内容的提问来源于stack exchange,提问作者Habibur Rahman
相关产品推荐
相关产品推荐

