Python 1和True的最佳解读

Python set interpetation of 1 and True

在IPython3互动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) 保留下来? 我们如何才能同时保留两者?

集合是 hashables 的集合。尽管语句 1 is True 为假,但语句 1 == True 为真。因此,它们具有相同的哈希值,不能单独存在于一个集合中,你不能将它们都放在一个集合中

编辑 明确地说,正如jme指出的那样,这是因为两件事都是真的——它们是相等的(根据__eq__)并且它们具有相同的hash value(根据 __hash__)。

在理想情况下,相等的对象也将具有相同的哈希值,谢天谢地,对于内置类型也是如此。