如何在 python 中创建不可变字典?

新手上路,请多包涵

我想 subclass dict 在 python 中,这样子类的所有字典都是不可变的。

我不明白 __hash__ 是如何影响不变性的,因为在我的理解中它只是表示对象的 相等不相等

那么, __hash__ 可以用来实现不变性吗?如何 ?

更新

目标是来自 API 的常见响应可以作为字典使用,它必须作为全局变量共享。那么,无论如何都必须完好无损?

原文由 Yugal Jindle 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 407
2 个回答

我找到了一个官方参考:被拒绝的 PEP 中包含的建议。

 class imdict(dict):
    def __hash__(self):
        return id(self)

    def _immutable(self, *args, **kws):
        raise TypeError('object is immutable')

    __setitem__ = _immutable
    __delitem__ = _immutable
    clear       = _immutable
    update      = _immutable
    setdefault  = _immutable
    pop         = _immutable
    popitem     = _immutable

归因:http: //www.python.org/dev/peps/pep-0351/

原文由 Yugal Jindle 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题