在IPython 3交互式shell中:
In [53]: set2 = {1, 2, True, "hello"} In [54]: len(set2) Out[54]: 3 In [55]: set2 Out[55]: {'hello', True, 2}
那是因为1和True获得相同的插值,所以考虑到集合消除了重复项,所以只有其中一个(True)得以保留?我们如何保持两者?
集合是哈希的集合。即使该语句1 is True为False,该语句1 == True为True。因此,它们具有相同的哈希值,并且不能单独存在于集合中,并且 不能将它们都保留在集合中
1 is True
1 == True
编辑 使其明确,正如jme指出的,这是因为这两个都是正确的-它们相等(per __eq__)并且具有相同的哈希值(per __hash__)。
__eq__
__hash__
在理想情况下,相等的对象也将具有相同的哈希值,并且值得庆幸的是,对于内置类型而言,这是正确的。