说说 Python 的不可变字典类型 MappingProxyType

833 阅读1分钟

MappingProxyType 类接受一个字典入参,它会返回一个只读的映射视图1。这个视图对象会受原字典对象的影响,也就是说如果原字典对象中的内容发生变化,那么这个视图对象也会跟着发生变化。

dict={1: 'A'}
not_modify_dict=MappingProxyType(dict)
logging.info('not_modify_dict -> %s', not_modify_dict)
logging.info('not_modify_dict[1] -> %s', not_modify_dict[1])
# not_modify_dict[2]='B'
dict[2]= 'B'
logging.info('not_modify_dict -> %s', not_modify_dict)
logging.info('not_modify_dict[2] -> %s', not_modify_dict[2])

运行结果:

INFO - not_modify_dict -> {1: 'A'}
INFO - not_modify_dict[1] -> A
INFO - not_modify_dict -> {1: 'A', 2: 'B'}
INFO - not_modify_dict[2] -> B

如果这里给 not_modify_dict 赋值,比如 not_modify_dict[2]='B',那么就会抛出 TypeError: 'mappingproxy' object does not support item assignment。

因此 MappingProxyType 类对象适用于那些一旦初始化就不能修改的场景。


参考资料: 【1】Luciano Ramalho (作者),安道,吴珂 (译者).流畅的Python.人民邮电出版社,2017:154-155.