如何在 Python 中创建一个不可变的字典 - Adam Johnson

本文介绍了Python中如何创建不可变字典,重点讲解了MappingProxyType的作用和用法,以及在尝试修改不可变字典时会遇到的错误。同时提到了Python 3.9的字典合并运算符和第三方库如immutables、pyrsistent作为替代方案,建议在可能的情况下优先使用标准库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 的内置集合类型具有可变和不可变两种风格:

  • 可变版本:list 不可变版本:元组
  • 可变版本:set  不可变版本:frozenset
  • 可变版本:dict 不可变版本:MappingProxyType

PEP 416早在 2012 年就为 Python 3.3提出了一种类型frozendict。PEP 被拒绝,原因有很多。推理包括几个关于不可变 dict 的效用的问题,在将它们添加到代码之前值得检查一下。

但是 PEP确实为我们提供了一个模拟不可变dicts:的工具类型.MappingProxyType 。此类型是 adict或其他映射的只读代理。Python 在内部将这种类型用于重要的词典,这就是为什么您不能随意修补内置类型的原因。

Python 3.3 中唯一的变化是为用户代码公开这种类型。

要创建一个"不可变"的字典,MappingProxyType从字典中创建一个,而不保留对底层字典的任何引用:

<span style="color:#333333"><span style="background-color:#fefefe"><span style="color:#444444"><span style="background-color:#f6f6f6">from types <b>import</b> MappingProxyType

power_levels = MappingProxyType(
    {
        <font><spa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值