python 如何高性能、节约内存的进行字典合并

发布于 2020-02-18 20:32:16

pyhone里合并字典有两种方法

方法1.普通合并

dic1 = {'x': 1, 'y': 2 }
dic2 = {'y': 3, 'z': 4 }
merged1 = {**dic1, **dic2} # {'x': 1, 'y': 3, 'z': 4}

方法2.使用ChainMap进行逻辑合并

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倍多。

0 条评论

发布
问题