Python设置了1和True的互换

pka*_*mol 8 python set

在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}
Run Code Online (Sandbox Code Playgroud)

这是因为1和True得到相同的插入,所以假设集合消除重复,只有其中一个(真)得到留下?我们如何保持两者?

meh*_*guh 8

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

编辑为了使它明确,正如jme指出的那样,这是因为两件事情都是真的 - 它们是相等的(每个__eq__)并且它们具有相同的散列值(每个__hash__).

在一个完美的世界中,相等的对象也将具有相同的哈希值,幸运的是内置类型也是如此.

  • 澄清:具有相同散列值*的两个项目可以*出现在同一个集合中.但是,它们必须是不平等的. (5认同)