Python--关于字典合并,ChainMap方法合并

本文探讨了Python中使用常规方法和ChainMap合并字典的区别。常规方法下,修改合并后的字典不会影响原字典;而ChainMap下,修改会反映到原字典中,因ChainMap仅在逻辑上合并字典。

常规方法合并两个字典,然后修改合并的字典的值,不会使被合并的字典的值发生改变,因为dict3字典中的“x”指向的内存地址是dict3中的。而dict1中的“x”指向的是dict1的内存地址中的

dict1 = {'x': 1, 'y': 2}
dict2 = {'y': 3, 'z': 4}
dict3 = {**dict1, **dict2}
print(f'dict3:-->{dict3}')
dict3['x'] = 10
print(f'dict1:-->{dict1}')

print(id(dict1['x']))
print(id(dict3['x']))
=======================================
dict3:-->{'x': 1, 'y': 3, 'z': 4}
dict1:-->{'x': 1, 'y': 2}
1711833200
1711833488

使用ChainMap合并字典,会有不一样的结果

from collections import ChainMap

dict4 = ChainMap(dict1, dict2)
print(f'dict4:-->{dict4}')
print(f'dict4:-->{dict(dict4)}')

dict1['x'] = 10
print(f'dict1:-->{dict1}')
===========================================
dict4:-->ChainMap({'x': 1, 'y': 2}, {'y': 3, 'z': 4})
dict4:-->{'z': 4, 'y': 2, 'x': 1}
dict1:-->{'x': 10, 'y': 2}

ChainMap只在逻辑上合并,在内部创建了一个容纳这些字典的列表,使用ChainMap合并字典,并修改x的值,dict1中x的值会发生改变

print(id(dict4['x']))
print(id(dict1['x']))
===============================
1711833488
1711833488

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值