当一个变量a=1的时候 约定为:变量a指向存储1的内存地址的过程
浅拷贝:copy.copy()
深拷贝:copy.deepcopy()
import copy ##导入拷贝模块
a = [1,2]
b = [3,4]
c = (a,b)
d = copy.copy(c)
print(id(c))
print(id(d))
print(id(a))
print(id(c[0]))
print(id(d[0]))
结果:
139704810140448
139704810140448 ##没有开辟新的内存地址,仅仅时指向
139704810223088
139704810223088
139704810223088
import copy
a = [1,2]
b = [3,4]
c = (a,b)
d = copy.deepcopy(c)
print(id(c))
print(id(d))
print(id(a))
print(id(c[0]))
print(id(d[0]))
结果:
2653642211016
2653642282632
2653642228552
2653642228552
2653643684744
元组不能进行浅拷贝,仅仅是指向,元组深拷贝是开辟新的内存地址空间与其他类型的深拷贝相同(一般的浅拷贝和深拷贝都需要开辟新的内存地址)
元组是不可变数据类型,意味着数据一定不能修改
因此它会自动判断为指向
import copy
a = [1,2]
b = [3,4]
c = [a,b]
d = copy.deepcopy(c)
h = copy.copy(c)
print(id(c))
print(id(d))
print(id(h))
print(id(a))
print(id(c[0]))
print(id(d[0]))
print(id(h[0]))
结果:
2653643755912
2653643684680
2653643684744
2653642228552
2653643755848
2653642228552
列表的浅拷贝和深拷贝都是开辟新的内存地址空间 浅拷贝只是外壳的地址空间发生改变 深拷贝由里到外地址空间都发生改变
浅拷贝可以拷贝到之后追加的元素 深拷贝不能
import copy
a = [1,2]
b = [3,4]
c = [a,b]
d = copy.copy(c)
a.append([5])
print(c)
print(d)
[[1, 2, [5]], [3, 4]]
[[1, 2, [5]], [3, 4]]
import copy
a = [1,2]
b = [3,4]
c = [a,b]
d = copy.deepcopy(c)
a.append([5])
print(c)
print(d)
[[1, 2, [5]], [3, 4]]
[[1, 2], [3, 4]]