pyhone里合并字典有两种方法
dic1 = {'x': 1, 'y': 2 }
dic2 = {'y': 3, 'z': 4 }
merged1 = {**dic1, **dic2} # {'x': 1, 'y': 3, 'z': 4}
from collections import ChainMap
merged2 = ChainMap(dic1,dic2)
print(merged2) # ChainMap({'x': 1, 'y': 2}, {'y': 3, 'z': 4})
第一种方法,修改merged['x']=10,dic1中的x值不变,merged是重新生成的一个新字典。
但是,ChainMap却不同,它在内部创建了一个容纳这些字典的列表。因此使用ChainMap合并字典,修改merged['x']=10后,dic1中的x值改变。
ChainMap这种只在逻辑上合并字典的方法,可以大大节省内存的使用。普通的合并字典会重新创建一个字典,其占用内存会很大,演示如下:
import sys
sys.getsizeof(merged1) # 240
结果显示会占用240个字节,ChainMap合并后的字典由于只是创建列表,其元素只是指针变量(指向了原来的字典),占用字节自然会小很多:
sys.getsizeof(merged2) #56
只占用56个字节,相比第一种合并方法节省内存4倍多。