深浅拷贝需要导入copy模块
深拷贝用到的是copy.deepcopy() : 外层的对象和内部的元素都拷贝一遍。
浅拷贝用到的是copy.copy() : 拷贝最外层的对象,内部的元素只拷贝一个引用。
# 浅拷贝: (数据半共享)会创建对象
import copy
a1 = [1,2,3,[4,5]]
a2 = copy.copy(a1) # a1 a2 都是独立对象
# 可以通过id()来查看变量的内存地址可以知道差异
print(a1,id(a1)) # [1, 2, 3, [4, 5]] 2362273125384
print(a2,id(a2)) # [1, 2, 3, [4, 5]] 2362691148104
a1.append(7)
print(a1,id(a1)) # [1, 2, 3, [4, 5], 7] 2362273125384
print(a2,id(a2)) # [1, 2, 3, [4, 5]] 2362691148104
# 浅拷贝: 外层的内存地址不同,但是内层的内存地址相同
print(id(a1[3]))
print(id(a2[3]))
# 深拷贝 : 数据完全不共享,两者之间完全独立
b1 = [1,2,3,[4,5]]
b2 = copy.deepcopy(b1) # b1 b2 之间完全独立,互不干扰
# 通过id()查看
print(b1,id(b1)) # [1, 2, 3, [4, 5]] 1717067507400
print(b2,id(b2)) # [1, 2, 3, [4, 5]] 1717067507144
b1.append(6)
print(b1,id(b1)) # [1, 2, 3, [4, 5], 6] 1717067507400
print(b2,id(b2)) # [1, 2, 3, [4, 5]] 1717067507144
b1[3].append(3)
print(b1,id(b1)) # [1, 2, 3, [4, 5, 3], 6] 1717067507400
print(b2,id(b2)) # [1, 2, 3, [4, 5]] 1717067507144