s = {1, True} 是 {1} 和 s = {1, False} 是 {1, False} 为什么?[复制]

s = {1, True} is {1} and s = {1, False} is {1, False} why? [duplicate]

提问人:Habibur Rahman 提问时间:11/2/2023 最后编辑:Mark RotteveelHabibur Rahman 更新时间:11/2/2023 访问量:173

问:

这个问题在这里已经有答案了:
22天前关闭。

社区在 22 天前审查了是否重新打开这个问题,并将其关闭:

原始关闭原因未解决

我对python数据结构的以下输出感到困惑。set

# 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}

为什么在情况 1 和 4 中,不打印 True 和 False

我是 Python 编程的初学者。我发现了一个问题s = {1, True},它的输出是什么?”然后我尝试了其他情况。

python-3.x

评论

2赞 Abdul Niyas P M 11/2/2023
尝试和hash(1)hash(True)
0赞 slothrop 11/2/2023
这难道不是关于平等而不是哈希本身吗?集合和字典可以处理具有相同哈希值的多个不相等的项目(请参阅 stackoverflow.com/questions/9010222/...)。事实上,这阻止了它们在同一个集合中共存。1 == True

答:

1赞 Goku - stands with Palestine 11/2/2023 #1

True == 1

False == 0

set()不能有重复的元素。

集合是哈希值的集合。即使语句 1 为 True 也是 False,语句 1 == True 为 True。因此,它们具有相同的哈希值,不能单独存在于一个集合中,并且不能将它们都保留在一个集合中

这是原始问题的链接:Python 集合 1 和 True 的插播

评论

0赞 Markus Meskanen 11/2/2023
True == 1但不是:-)它们是相同的(),这就是为什么它以这种方式工作的原因。Set 不关心 or ,只关心True is 1hash()hash(True) == hash(1) == 1set()==ishash()
4赞 blhsing 11/2/2023
@MarkusMeskanen 不对。 确实关心.演示:ideone.com/3JtHhsset==
1赞 Markus Meskanen 11/2/2023
@blhsing 感谢您的更正,您是对的,set 两者都使用。