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__
)。
在理想情况下,相等的对象也将具有相同的哈希值,谢天谢地,对于内置类型也是如此。
在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__
)。
在理想情况下,相等的对象也将具有相同的哈希值,谢天谢地,对于内置类型也是如此。