sda*_*das 6 python hash dictionary list
在Python中使用字典时,以下是不可能的:
d = {}
d[[1,2,3]] = 4
Run Code Online (Sandbox Code Playgroud)
自从'list' is an unhashable type.但是,idPython中的函数返回一个对象的整数,该对象保证对象的生命周期是唯一的.
为什么Python不使用id哈希字典呢?有缺点吗?
jam*_*lak 12
原因就在这里(为什么字典键必须是不可变的)
已经提出了一些不可接受的解决方案:
哈希按其地址(对象ID)列出.这不起作用,因为如果你构造一个具有相同值的新列表,它将无法找到; 例如:
mydict = {[1, 2]: '12'}
print mydict[[1, 2]]会引发
KeyError异常,因为[1, 2]第二行中使用的id 与第一行中的id 不同.换句话说,应该使用==而不是使用来比较字典键is.
这是一个要求,如果a == b,那么hash(a) == hash(b).使用id可以打破这个,因为如果你改变列表,ID不会改变.然后,您可能有两个具有相同内容但具有不同哈希值的列表.
另一种看待它的方法是,是的,你可以这样做,但这意味着你无法用另一个具有相同内容的列表来检索dict值.您只能使用与键完全相同的列表对象来检索它.
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |