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