一禁荸、淺copy
可以理解成是照鏡子萍程,鏡子內(nèi)外的你都是你,無(wú)論你做什么內(nèi)外都會(huì)做改變剧董。
首先可以看一下兩者的內(nèi)存地址我們會(huì)發(fā)現(xiàn)幢尚,兩者的內(nèi)存地址是一致的。
a= [1,2,3,4]
b = a
print (id(a),id(b))
>>>
656944460552 656944460552
如果對(duì)a中的內(nèi)容改變對(duì)b也會(huì)造成響應(yīng)的改變
a= [1,2,3,4]
b = a
a.append(5)
print(b)
>>>
[1, 2, 3, 4, 5]
二.深copy
深copy可以理解成雙胞胎翅楼,雖然長(zhǎng)得一樣但各自有著各自的生活軌跡尉剩,互相不干擾,只是長(zhǎng)得的一樣.
不止c和e的內(nèi)存地址不一樣犁嗅,就連c和e中的a,b內(nèi)存地址也是不一樣
import copy
a = [1,2,3]
b =[6,5,4]
c=[a,b]
e = copy.deepcopy(c)
print(id(c),id(e))
print(id(c[0]),id(e[0]))
>>>
896343340360 896343269192
896343339080 896343269320
如果對(duì)a中的內(nèi)容改變對(duì)b是不會(huì)改變的
import copy
a = [1,2,3]
b = copy.deepcopy(a)
a.append(12)
print(b)
如果是元組會(huì)是什么樣子~
import copy
a = [1,2,3]
b =[6,5,4]
c=(a,b)
e = copy.deepcopy(c)
print(id(c),id(e))
>>>
182785630792 182785669000
依舊是指向了不同的地址边涕,進(jìn)行了復(fù)制
三晤碘、copy
有了淺copy 和深copy 褂微,還有一種復(fù)制是只對(duì)最外層copy,這就copy
import copy
a = [1,2,3]
b =[6,5,4]
c=[a,b]
e = copy.copy(c)
print(id(c),id(e))
print(id(c[0]),id(e[0]))
>>>
930862456648 930862554376
930862526728 930862526728
發(fā)現(xiàn)最外層內(nèi)存地址指向不同园爷,但最內(nèi)層指向了同一個(gè)地址
寫一個(gè)實(shí)例可以
import copy
a = [11]
b = [22]
c = [33,a,b]
e = copy.copy(c)
#在共有的a中添加
a.append(12)
#在e中添加
e.append(12)
print("c",c,"\ne",e)
>>>
c [33, [11, 12], [22]]
e [33, [11, 12], [22], 12]
發(fā)現(xiàn)因?yàn)楸旧韈,e的內(nèi)存地址指向不同宠蚂,所以最外層有點(diǎn)類似深copy,但最內(nèi)層a,b的內(nèi)存指向相同所以才c,e中的ab都會(huì)同時(shí)改變
元組本身不可變童社,所以元組的時(shí)候使用copy求厕,相當(dāng)于淺copy
import copy
a=[1]
b=[2]
c=(a,b)
e= copy.copy(c)
print(id(c),id(e))
>>>
1042412167304 1042412167304