为何Python解释器将2.0与2视为相同字典键并返回2对应值?
Python字典中2和2.0被视为同键的原因
先看你给出的代码:
def func(): d = {1: "I", 2.0: "love", 2: "Python"} return d[2.0] print(func())
运行后输出Python而非预期的love,核心原因在于Python字典判断键是否重复的规则:
- 字典判断两个键是否为同一个,要同时满足两个条件:值相等(
==比较为True),且哈希值(hash()计算结果)相同。 - 对
2和2.0来说,2 == 2.0返回True,同时hash(2)和hash(2.0)的结果也是一致的,所以它们会被字典认定为同一个键。 - 字典在创建时,如果出现重复键,后面的键值对会直接覆盖前面的。所以
2: "Python"会覆盖之前的2.0: "love",不管你用d[2.0]还是d[2]去取值,拿到的都是最后被写入的Python。
内容的提问来源于stack exchange,提问作者Olasubomi
相关产品推荐
相关产品推荐

