一尘不染

Python将1和True设置为插值

python

在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)得以保留?我们如何保持两者?


阅读 329

收藏
2021-01-20

共1个答案

一尘不染

集合是哈希的集合。即使该语句1 is True为False,该语句1 == True为True。因此,它们具有相同的哈希值,并且不能单独存在于集合中,并且 不能将它们都保留在集合中

编辑 使其明确,正如jme指出的,这是因为这两个都是正确的-它们相等(per
__eq__)并且具有相同的哈希值(per
__hash__)。

在理想情况下,相等的对象也将具有相同的哈希值,并且值得庆幸的是,对于内置类型而言,这是正确的。

2021-01-20