在GitHub看的题,做个笔记。
some_dict = {}
some_dict[5.5] = "Ruby"
some_dict[5.0] = "JavaScript"
some_dict[5] = "Python"
print(some_dict[5.5],some_dict[5.0],some_dict[5])
"Ruby" "Python" "Python"
为什么会这样呢?some_dict[5]将some_dict[5.0]覆盖掉了。
大家都知道整形和浮点型都是不可变类型,但是对于字典来说它们是不是唯一的呢?
print(id(5.0),id(5))
print(5.0 == 5)
print(hash(5.0) == hash(5))
125207608 1704830176
True
True
虽然存储地址不同,但是显然他们的值相同,且对于字典来说5与5.0具有相同哈希值,所以some_dict[5]会覆盖some_dict[5.0]。
说明:
- Python字典检查相等性并比较哈希值以确定两个键是否相同。
- 具有相同值的不可变对象在Python中始终具有相同的哈希值。
注意:具有不同值的对象也可能具有相同的哈希值(称为哈希冲突)。 - some_dict[5] = "Python"执行语句时,现有值“JavaScript”被“Python”覆盖,因为Python识别5并且5.0与字典的键相同some_dict。
所以以后使用字典的时候要注意啊。
网友评论