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)#a的元素: [[1, 2], 1, 'abc'] c的元素: [[1, 2], 1, 'abc']
 3 print(id(a[0]))
 4 print(id(c[0]))
 5 print("a[0][1]地址:",id(a[0][1])) #8791044223264
 6 print("c[0][1]地址:",id(c[0][1]))#8791044223264
 7 c[0][1] = 1111
 8 print("a的元素:",a,"c的元素:",c)#与浅拷贝不同,c变,a不会变
 9 # a的元素: [[1, 2], 1, 'abc'] c的元素: [[1, 1111], 1, 'abc']
10 print("a[0][1]地址:",id(a[0][1]))#8791044223264
11 print("改动后c[0][1]地址:",id(c[0][1]))#35603312

 

posted @ 2019-10-09 20:22  fangxs666  阅读(113)  评论(0编辑  收藏  举报