关于Python集合中len()计算元素数量的结果疑问
集合长度不符合预期的原因解析
你的代码:
set2={1,2,3,'a','b','c',True,False,False} print('Set:',set2, "Length:",len(set2))
实际输出:
Set: {False, 1, 2, 3, 'a', 'b', 'c'} Length: 7
问题出在Python布尔值与整数的底层关联上:
- Python里
bool是int的子类,True等价于1,False等价于0——True == 1和False == 0的结果都是True,且两者的哈希值完全相同。 - 集合的去重逻辑是:只要两个元素哈希值相同,且用
==比较为真,就会被视为同一个元素,仅保留一个。
对应到你的代码中:
True和1被判定为重复元素,集合只保留其一(具体保留哪个由内部哈希机制决定,不影响总数)- 两个
False是完全重复的,自然被合并成一个 - 剩余的
2、3、'a'、'b'、'c'都是唯一元素
加起来正好是7个元素,所以输出的长度为7。
内容的提问来源于stack exchange,提问作者Humbell
相关产品推荐
相关产品推荐

