Python set 类、float 和 int 求值

wur*_*ach 7 python collections class set

我还没有看到它的实现细节,set Class但我认为这个问题的答案就在某个地方。Python 赋值基本上评估右值并使用标识符作为引用对象来指向类对象。集合也是如此,即它们是抽象数据结构或引用对象的“集合”。集合不允许重复,当我创建一个集合时,如下所示:

s1 = {False, 1.0, 1, "a"} > {False, 1.0, "a"}
Run Code Online (Sandbox Code Playgroud)

Float 类胜过 int 类,显然它们评估的是相同的东西。但是为什么float显示而init不显示呢?我似乎无法找到合适的答案或在源代码中看到它。

顺便说一句,我想提一下,我注意到,如果 True 和 False 都使用 .union() 操作出现,则 True 和 False 将以某种方式分别代替 1 和 0 。因此,浮点型胜过整数型,而整数型胜过布尔型。但,

>>> s1 = {False, 'a', 1}
>>> s2 = {True, 'a', 0}

>>> s1 | s2
{False, 1, 'a'} 
Run Code Online (Sandbox Code Playgroud)

错误仍然存​​在..我不知道这是否是 REPL 问题,但再次测试后我{0, 1, 'a'}每次都会得到我不知道发生了什么。

>>> s1 = {True, 'a', 1}
>>> s1
{1, 'a'}
>>> s2 = {False, 'a', 0}
>>> s2
{0, 'a'}
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

>>> s1.union(s2)
{0, 1, 'a'}
Run Code Online (Sandbox Code Playgroud)

kos*_*tya 3

来自https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy

布尔类型是整数类型的子类型,在几乎所有上下文中,布尔值的行为分别类似于值 0 和 1,例外是当转换为字符串时,返回字符串“False”或“True” , 分别。