先看看 代码以及运行结果。
分别是 :
赋值 =
字典内置方法 dict.copy()
copy模块的 copy.copy() 浅复制方法
copy模块的copy.deepcopy()深复制方法
import copy
d1 = {"小明": 98, "小红": 99, "小东": [33, 56, 65]}
print("原始数据:", d1)
print(id(d1))
d2 = d1 # 引用拷贝 d1和d2指向同一个内存地址,d2只是d1的一个别名。
d3 = d1.copy() # 字典的内置方法、浅拷贝,d3和d2的父对象相互独立,但子对象[33,56,65]指向同一个内存地址。
d4 = copy.copy(d1) # 拷贝,父对象独立,子对象不对立。 ####我觉得是浅拷贝
d5 = copy.deepcopy(d1) ####深拷贝
print("之前的d2",id(d2))
print("之前的d3",id(d3))
print("之前的d4",id(d4))
d1["小明"] = 86 # 将字典d1中父对象"小明"的分数修改为 86
d2["小东"].append(95) # 向字典d1中子对象列表[33,56,65]添加一个元素 95
print("修改后的数据d1:", d1)
print(id(d1))
print("引用拷贝d2:", d2) # 引用拷贝,父对象,子对象都改变
print(id(d2))
print("浅拷贝d3:", d3) # 浅拷贝,父对象不改变,但子对象改变
print(id(d3))
print("浅拷贝d4:", d4) # 浅拷贝,父对象不会变,子对象会改变。
print(id(d4))
print(d5)
print(id(d5))
直接上结论 :
1 赋值操作 = 只是 给原变量换了个标签,内存地址啥的都一样。什么都和原数据一样。是引用
2 dict.copy() 字典的复制方法,类似于 浅复制。父对象 深复制(不跟着变),子对象浅复制(跟着原数据子对象 的改变而改变),内从地址和原数据不一样
3 copy.copy() 和2 一样 浅复制
4copy.deepcopy() 深复制 什么都是复制过来 创建独立内存空间。不跟着原数据的改变而改变。
欢迎大家共同探讨交流,小弟不胜感激