時(shí)間:2022-10-23 14:23:24 來源:洛陽尚賢科技
注意:拷貝時(shí)應(yīng)優(yōu)先選擇淺拷貝。因?yàn)橐粚拥牧斜聿恍枰羁截悾?即使多層列表,那它的內(nèi)表通常是不變的,所以也用不到深拷貝。何必浪費(fèi)內(nèi)存。
舉例說明:
list01 = [10, [20, 30]] #這里面有兩層,即兩個(gè)表
list02 = list01[:] #切片復(fù)制會(huì)復(fù)制一層得到新的列表地址(所以就2份了),復(fù)制后得到的是10的列表地址,和[20, 30] 的上一級(jí)列表地址,也就是說并沒有得到[20, 30]本身的列表地址??偨Y(jié):淺拷貝,*層數(shù)據(jù)兩份,深層數(shù)據(jù)一份。
list02[0] = 100 # 因此,這里的修改是在新的列表地址上做的修改,兩分互不影響,故不影響原表。
list02[1][1] = 300 #但是這里的第二個(gè)[1]對(duì)應(yīng)的是原表中的內(nèi)表,這個(gè)內(nèi)表[20, 30] 的列表地址沒有被list02 拷貝走。因此,它還是一份,根據(jù)一份互相影響的原則,這里的改動(dòng)一定影響原表。
print(list02) # [100, [20, 300]] 可以看到list02的 *個(gè)數(shù)被改,但原表的*個(gè)數(shù)沒改。
print(list01) #[10, [20, 300]] 不過原表的內(nèi)表第二個(gè)數(shù)被改了。證明以上邏輯正確。這就是淺拷貝。
list02 = copy.deepcopy(list01)
優(yōu)點(diǎn):*互不影響
缺點(diǎn):占內(nèi)存較多
如果有兩層,那深拷貝復(fù)制所有數(shù)據(jù)兩份。所有數(shù)據(jù)是指:列表地址、上一級(jí)列表地址、數(shù)據(jù)地址等一切。
import copy # 這就是準(zhǔn)備深拷貝工具
list01 = [10, [20, 30]]
list02 = copy.deepcopy(list01)
list02[0] = 100
list02[1][1] = 300
print(list02) # [100, [20, 300]]
print(list01) # [10, [20, 30]] #看,深拷貝做到了兩個(gè)表*的互不影響!
手機(jī):18537972228
電話:0379-64321586
Email:shangxian@sxglpx.com
地址:洛陽市澗西區(qū)九都西路181號(hào)中弘中央廣場(chǎng)D座2705室