Python字典打破了python的规律

RIC*_*CKY 7 python dictionary

当我做:

>>> d={True:'yes',1:'no',1.0:'maybe'}
>>> d
Run Code Online (Sandbox Code Playgroud)

我收到的输出:

>>> {True:'maybe'}
Run Code Online (Sandbox Code Playgroud)

这不仅是我的一些键被删除,而且它所持有的值也被改变了.

为什么True优先于另一个bool键?

bab*_*unk 13

True,1和1.0三个键相互比较并且都具有相同的散列(尝试hash(True),hash(1)并且hash(1.0)在Python REPL中),因此它们都对应于字典中的相同插槽.要设置的最后一个值获胜 - 在这种情况下为"可能".

请注意,如果密钥不相等,即使它们散列到字典中的相同插槽,它们也会被单独存储.

  • 它本质上是做'd = {}; d [True] ='是'; d [1] ='不'; d [1.0] ='也许'.所以它保留了第一个键(因为它们都是相同的),但总是在进行赋值,所以你得到最后一个值. (3认同)
  • 等值将始终具有相同的哈希值.更重要的是,这些值等于它们的哈希值相等.这里令人惊讶的行为的根源是'True == 1` (2认同)