在 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)得以保留?
我们怎样才能同时保留两者呢?
集合是一组哈希表 https://docs.python.org/3/glossary.html#term-hashable。尽管声明1 is True
是 False,该陈述1 == True
是真的。因此,它们具有相同的哈希值,不能单独存在于一个集合中,并且你不能把它们都放在一个集合中
EDIT为了明确起见,正如 jme 指出的那样,这是因为这两件事都是真的——它们是平等的(根据__eq__
)并且他们有相同的哈希值 https://docs.python.org/3/reference/datamodel.html#object.__hash__ (per __hash__
).
在完美的世界中,相等的对象也将具有相同的哈希值,值得庆幸的是,对于内置类型来说这是正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)