python学习记录9-------深浅copy

a=1;#内存空间划分一个区域存放1的值,a指向这个内存空间;可用id(a)查看a的地址

当a = 2时,此时 内存空间划分一个区域存放2的值,a指向这个内存空间区域

---------------------------深浅copy---------------------------

浅copy:只拷贝第一层(a[n]为第一层,a[n][m]则为第二层,a[n][m][l]则为第三层),第二层以上的数据都是共享,a【】【】与b【】【】都是同时改动

1 a= [[1,2],1,"abc"]
2 b = a.copy() #浅拷贝  只拷贝了第一层,即b[0]存储a[0]指向的地址,指向[1,2],b[1]和b【2】与a[1],a[2]指向相同。
3 print(id(a[1]))#打印a[1]指向的地址 8791048155392
4 print(id(b[1]))#打印b[1]指向的地址,与a【1】相同 8791048155392
5 b[1]=33#b[1]存储指向33的内存地址 8791048156416

深copy:完完全全复制一份,a与b任何改动都是独立的。

 1 c= copy.deepcopy(a) #深拷贝, a与c是数据一致,独立出来
 2 print("a的元素:",a,"c的元素:",c)
 3 print(id(a[0]))
 4 print(id(c[0]))
 5 print("a[0][1]地址:",id(a[0][1]))
 6 print("c[0][1]地址:",id(c[0][1]))
 7 c[0][1] = 1111
 8 print("a的元素:",a,"c的元素:",c)
 9 print("a[0][1]地址:",id(a[0][1]))
10 print("改动后c[0][1]地址:",id(c[0][1]))
View Code

猜你喜欢

转载自www.cnblogs.com/fangxiaosheng/p/11644149.html