很多人喜欢用字典来存储Python项目中的各种数据。虽然这不是一个好习惯,但对于少量数据使用字典无疑是最简单、最方便的方式。但是前提是你不要不小心把字典里的值改写了。我们知道在字典中添加数据时:a={'name':'kingname','salary':99999}a['address']='Shanghai'我们看字典的时候一般是这样写的:a['address']所以在代码中,确实存在字典不小心被覆盖的情况,例如:is_rich_man=a['salary']==99999一般情况下is_rich_man应该等于True或者False。但是如果等号被省略,变成:is_rich_man=a['salary']=99999,那么字典中的数据就会被覆盖。但是代码并没有报错,如下图所示:那么,我们有没有办法实现一个一旦初始化就不能修改的字典呢?其实Python自带了这个函数,就是types.MappingProxyType。使用它,你可以轻松实现一个不可修改的字典:fromtypesimportMappingProxyTypeinfo={'name':'kingname','salary':99999}safe_info=MappingProxyType(info)print('kingname'smonthlysalaryis:',safe_info['salary'])safe_info['salary']=0运行效果如下图所示:MappingProxyType就像一个挡在字典前面的盾牌,从前面不能修改数据,但是如果真的需要修改数据,可以直接修改原始字典,此时,修改会体现在MappingProxyType处理的对象上,如下图所示:让可信的代码可以修改数据,防止不信任的代码修改数据,一箭双雕。
