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.
网友评论