Python 字典的深拷贝[dict.deepcopy()]和浅拷贝[dict.copy()]

本文探讨了Python字典的深拷贝(dict.deepcopy())和浅拷贝(dict.copy())的区别。直接赋值会导致变量共享同一内存数据。浅拷贝仅拷贝父级字典,子级列表的变动仍会影响源字典。深拷贝则会递归创建字典的完整副本,确保修改副本不会影响原始字典。
import copy
dict1 = {
        "1" : "1",
        "2": "2",
        "user":"吉米",
        "num":[
            1,2,3,4
            ]
}
dict2 = dict1 #直接赋值
dict3 = dict1.copy() #浅拷贝
dict4 = copy.deepcopy(dict1) #深拷贝

print(dict1)
print(dict2)
print(dict3)
print(dict4)
dict1["1"] = 34
dict1[2] = "somethings"
dict1["num"].remove(1)

print("修改后的值",dict1)
print("直接赋值",dict2)
print("浅拷贝",dict3)
print("深拷贝",dict4)

输出内容打印如下:
在这里插入图片描述
总结
1.直接赋值是根据变量的值变动而变动
2.浅拷贝会拷贝父级的目录(根目录)的数据,但字典的子级列表num元素发生了改变。
3.深拷贝递归拷贝所有目录的数据,完全在另外内存中复制了一份原字典,所以对dict1的修改不会影响dict4的数据

`copy.deepcopy()` **既可以拷贝字典,也可以拷贝列表**,实际上它可以拷贝**任何复杂的Python对象**,包括嵌套的字典、列表、自定义类实例等。 --- ### 回答问题: `copy.deepcopy(x)` 的作用是创建对象 `x` 的一个**完全独立的副本**,递归地复制 `x` 及其内部包含的所有子对象,无论这个对象是字典、列表、集合、类实例还是其他可变类型。 #### ✅ 它能处理: - 列表(`list`) - 字典(`dict`) - 集合(`set`) - 自定义对象(如类实例) - 任意嵌套结构(如字典中含列表,列表中含字典等) --- ### 示例代码说明: #### 1. 深拷贝字典(含嵌套) ```python import copy a = {'x': [1, 2, {'y': 3}]} b = copy.deepcopy(a) b['x'][2]['y'] = 999 print(a) # {'x': [1, 2, {'y': 3}]} —— 不受影响 print(b) # {'x': [1, 2, {'y': 999}]} ``` #### 2. 深拷贝列表(含嵌套) ```python import copy original_list = [1, [2, 3], {'a': [4, 5]}] copied_list = copy.deepcopy(original_list) copied_list[1].append(6) copied_list[2]['a'].append(7) print(original_list) # [1, [2, 3], {'a': [4, 5]}] —— 原始未变 print(copied_list) # [1, [2, 3, 6], {'a': [4, 5, 7]}] ``` #### 3. 深拷贝混合结构 ```python data = { 'users': [ {'name': 'Alice', 'hobbies': ['reading', 'coding']}, {'name': 'Bob', 'hobbies': ['gaming']} ] } data_copy = copy.deepcopy(data) data_copy['users'][0]['hobbies'].append('swimming') print(data['users'][0]['hobbies']) # ['reading', 'coding'] —— 不受影响 print(data_copy['users'][0]['hobbies'])# ['reading', 'coding', 'swimming'] ``` --- ### 对比浅拷贝: 如果使用浅拷贝(如 `copy.copy()` 或 `list()` / `dict()` 构造函数): ```python shallow = copy.copy(data) # 或 data.copy(), list(), dict() ``` 只会复制第一层,嵌套的对象仍然共享引用,修改内层会导致原对象也被影响。 --- ### 总结: - `copy.deepcopy()` 是通用的深度拷贝函数; - 它不局限于字典或列表,适用于所有支持复制的 Python 对象; - 特别适合用于需要完全隔离原始数据副本的场景(尤其是嵌套结构); ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值