15. 逻辑上合并字典
案例 3 中合并字典的方法:
In [94]: dic1 = {'x': 1, 'y': 2 }
In [95]: dic2 = {'y': 3, 'z': 4 }
In [96]: merged = {**dic1, **dic2}
In [97]: merged
Out[97]: {'x': 1, 'y': 3, 'z': 4}
修改 merged[‘x’]=10,dic1 中的 x 值不变,merged 是重新生成的一个“新字典”。
但是,collections 模块中的 ChainMap 函数却不同,它在内部创建了一个容纳这些字典的列表。使用 ChainMap 合并字典,修改 merged[‘x’]=10 后,dic1 中的 x 值改变。
如下所示:
In [98]: from collections import ChainMap
In [94]: dic1 = {'x': 1, 'y': 2 }
In [95]: dic2 = {'y': 3, 'z': 4 }
In [99]: merged = ChainMap(dic1,dic2)
In [100]: merged
Out[100]: ChainMap({'x': 1, 'y': 2}, {'y': 3, 'z': 4})
In [101]: merged['x'] = 10
In [102]: dic1 # 改变,共用内存的结果
Out[102]: {'x': 10, 'y': 2}