Python基础之直接赋值、浅复制、深度复制
直接赋值:即对象的引用
浅复制:只复制父级对象,不复制子级对象(子级对象依然是引用)
深度复制:完全复制父级对象及其子级对象
例:
# 直接赋值
dic1 = {"name": "WXQ", "age": 22, "list": [1, 2, 3]}
dic2 = dic1
dic1.pop("age")
dic1["list"].append(4)
print(dic1)
print(dic2)
# {'name': 'WXQ', 'list': [1, 2, 3, 4]}
# {'name': 'WXQ', 'list': [1, 2, 3, 4]}
# 浅复制
dic1 = {"name": "WXQ", "age": 22, "list": [1, 2, 3]}
dic2 = dic1.copy()
dic1.pop("age")
dic1["list"].append(4)
print(dic1)
print(dic2)
# {'name': 'WXQ', 'list': [1, 2, 3, 4]}
# {'name': 'WXQ', 'age': 22, 'list': [1, 2, 3, 4]}
# 深度复制(需引用copy模块)
import copy
dic1 = {"name": "WXQ", "age": 22, "list": [1, 2, 3]}
dic2 = copy.deepcopy(dic1)
dic1.pop("age")
dic1["list"].append(4)
print(dic1)
print(dic2)
# {'name': 'WXQ', 'list': [1, 2, 3, 4]}
# {'name': 'WXQ', 'age': 22, 'list': [1, 2, 3]}
图解(结合以上代码):
直接赋值,dic1=dic2,实际上均指向了一个对象,dic1修改会使dic2指向的数据同样是修改
浅复制,dic1和dic2指向的对象不同,但子级对象(“list”)指向的对象依然是同一个,因此dic1“name”、“age”的修改不影响dic2,但修改list会同时修改dic1和dic2
深度复制,dic1和dic2指向的对象不同,其子对象也不同,dic1的修改完全不影响dic2