我了解为什么将可变对象放入字典很危险。但是,将所有列表/集合转换为元组/ frozensets是昂贵的;对于许多类型,根本没有容易获得的不可变版本。因此,有时值得直接散列可变对象,并采取适当的预防措施以确保所讨论的对象永远不会被修改。
在开始为可变对象实现非常复杂的自定义哈希函数之前,我想检查一下pickle.dumps用作哈希函数是否存在任何缺点- 无论是在性能,碰撞还是其他方面。
pickle.dumps
出于类似的原因,不能保证泡菜的输出是规范的,因为决定和设置顺序是不确定的。不要将pickle或pprint或repr用于哈希。