python3 把一个字典直接赋值或者浅拷贝给另一个字典的坑

本文深入探讨了Python中字典的拷贝机制,对比了浅拷贝与深拷贝的区别,详细解释了如何使用copy模块的deepcopy方法来避免修改一个字典时影响到另一个字典,这对于理解Python内存管理及数据独立性至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先附代码。

import copy
 
dict1 =  {'user':'runoob','num':[1,2,3]}
 
dict2 = dict1          # 浅拷贝: 引用对象,直接赋值的字典的键值对会随原字典的键值对而变
tmp = copy.deepcopy(dict1)   # 深拷贝深拷贝父对象(一级目录)和子对象(二级目录)
#tmp = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录)(字典的键,不会变了),子对象(二级目录)(字典的值)不拷贝(即修改原字典的值,浅拷贝的字典的值也会随之而改变),还是引用
#tmp = dict1

# 修改 data 数据
dict2['num'].remove(1)
dict1 = tmp

# 输出结果
print(dict1) #还是原来的
print(dict2) #已修改

解析:

把dict1赋值给dict2的时候,修改dict2的数据,会同样修改dict1的数据,需要dict1不变的时候就会出问题,这个用中间变量也不行,因为直接赋值是引用,且浅拷贝copy也不行,必须用深拷贝copy模块里的deepcopy方法,建一个中间变量深拷贝才能使修改dict2同时没有修改dict1。以上代码实现了修改dict2的数据,同时没有修改dict1的数据。

当然还有另一个解决方案是建一个空字典,然后遍历需要复制的字典,然后把每个键值对写入进空字典里。

Python 直接赋值、浅拷贝和深度拷贝解析: https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html

这篇文章也比较好:https://blog.csdn.net/LeonTom/article/details/82761319?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值