我还没有看到set Class
的实现细节,但我认为答案就在那里。 Python赋值基本上计算rvalues并使用标识符作为引用对象来指向类对象。对于集合也是如此,即它们是抽象数据结构或参考对象的“集合”。集合不允许重复,当我创建一个这样的集合时:
s1 = {False, 1.0, 1, "a"} > {False, 1.0, "a"}
Float类胜过int类,显然它们评估的是同一个东西。但为什么浮动show和init不?我似乎找不到合适的答案或在源头看到它。
顺便提一下,我想提一下,我注意到如果使用.union()操作两者都存在,则分别以某种方式篡改True和False代替1和0。所以Floats战胜了Ints,并且看起来Ints战胜了Bools。但是,
>>> s1 = {False, 'a', 1}
>>> s2 = {True, 'a', 0}
>>> s1 | s2
{False, 1, 'a'}
错误仍然存在.. 我不知道这是否是一个REPL问题,但经过再次测试后,每当我不知道发生了什么时我都会{0, 1, 'a'}
。
>>> s1 = {True, 'a', 1}
>>> s1
{1, 'a'}
>>> s2 = {False, 'a', 0}
>>> s2
{0, 'a'}
我错过了什么?
>>> s1.union(s2)
{0, 1, 'a'}
答案 0 :(得分:2)
来自https://docs.python.org/3/reference/datamodel.html#the-standard-type-hierarchy:
布尔类型是整数类型的子类型,并且布尔值在几乎所有上下文中的行为分别类似于值0和1,例外的是当转换为字符串时,字符串" False&# 34;或" True"分别归还。