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)
来自https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy:
布尔类型是整数类型的子类型,在几乎所有上下文中,布尔值的行为分别类似于值 0 和 1,例外是当转换为字符串时,返回字符串“False”或“True” , 分别。