深浅拷贝的定义:

浅拷贝只是增加了一个指针指向一个存在的地址,

深拷贝是增加一个指针并且开辟了新的内存,这个增加的指针指向这个新的内存,
采用浅拷贝的情况,释放内存,会释放同一内存,深拷贝就不会出现释放同一内存的错误

一层的情况:
import copy # 浅拷贝 li1 = [1, 2, 3] li2 = li1.copy() li1.append(4) print(li1,
li2) # [1, 2, 3, 4] [1, 2, 3] # 深拷贝 li1 = [1, 2, 3] li2 = copy.deepcopy(li1)
li1.append(4) print(li1, li2) # [1, 2, 3, 4] [1, 2, 3]
多层的情况:
import copy # 浅拷贝 指向共有的地址 li1 = [1, 2, 3,[4,5],6] li2 = li1.copy()
li1[3].append(7) print(li1, li2) # [1, 2, 3, [4, 5, 7], 6] [1, 2, 3, [4, 5, 7],
6] # 深拷贝 重指向 li1 = [1, 2, 3,[4,5],6] li2 = copy.deepcopy(li1) li1[3].append(7)
print(li1, li2) # [1, 2, 3, [4, 5, 7], 6] [1, 2, 3, [4, 5], 6]
其他
3. 拷贝的其他方式 浅拷贝对不可变类型和可变类型的copy不同 In [88]: a = [11,22,33] In [89]: b =
copy.copy(a) In [90]: id(a) Out[90]: 59275144 In [91]: id(b) Out[91]: 59525600
In [92]: a.append(44) In [93]: a Out[93]: [11, 22, 33, 44] In [94]: b Out[94]:
[11, 22, 33] In [95]: In [95]: In [95]: a = (11,22,33) In [96]: b =
copy.copy(a) In [97]: id(a) Out[97]: 58890680 In [98]: id(b) Out[98]: 58890680
分片表达式可以赋值一个序列 a = "abc" b = a[:] 字典的copy方法可以拷贝一个字典 d = dict(name="zhangsan",
age=27) co = d.copy() 有些内置函数可以生成拷贝(list) a = list(range(10)) b = list(a)
copy模块中的copy函数 import copy a = (1,2,3) b = copy.copy(a)

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信