我最近开始学习 Python,在玩 set 时遇到了一些奇怪的事情。以下代码示例不会产生预期的结果。
a_set = {True,2,3,4}
a_set.add(1)
我希望 a_set 有这些值{True, 1, 2, 3, 4}
,但是这个代码产生了{True, 2, 3, 4}
。
对此进行尝试变化也产生了相同的结果:
a_set = {1,2,3,4}
a_set.add(True)
预期{True, 1, 2, 3, 4}
实际 {1, 2, 3, 4}
尝试此操作False
并0
获得相同的结果:
a_set = {False,2,3,4}
a_set.add(0)
预期{False, 0, 2, 3, 4}
实际 {False, 2, 3, 4}
a_set = {0,2,3,4}
a_set.add(False)
预期{False, 0, 2, 3, 4}
实际 {0, 2, 3, 4}
我知道该bool
类型是继承自int
那True == 1
,False == 0
但仍然对上述结果感到有些惊讶。
有人知道这种行为是否是设计使然吗?还有可能有一个包含True
, False
,0
和的集合1
吗?
我确实进行了相当多的谷歌搜索,但无法找到我的问题的答案。
提前致谢
更新
针对以下评论,我同意以下问题部分回答了我的问题。
Python 中的 False == 0 和 True == 1 是实现细节还是由语言保证?
但我觉得它没有回答我关于集合的行为以及是否有可能同时包含True
和的集合的查询1
。尽管bool
继承自int
,但它们是不同的类型,所以我发现集合无法区分True
和1
有点令人困惑的事实。所以这真的是一个关于 Python 中集合行为的问题,而不仅仅是关于True == 1
.