在How to hash lists?我被告知我应该先转换为元组,例如[1,2,3,4,5]至(1,2,3,4,5).
所以第一个不能被哈希,但第二个可以.为什么*?
*我并不是在寻找详细的技术解释,而是为了直觉
解决方法:
主要是因为元组是不可变的.假设以下工作:
>>> l = [1, 2, 3]
>>> t = (1, 2, 3)
>>> x = {l: 'a list', t: 'a tuple'}
现在,当你做l.append(4)时会发生什么?你修改了字典中的密钥!远道而来!如果你熟悉散列算法是如何工作的,这应该会吓到你.另一方面,元组绝对是不可变的. t =(1,)可能看起来像是在修改元组,但实际上并非如此:它只是创建一个新的元组,保持字典键不变.