這篇文章主要介紹了舉例區(qū)分Python中的淺復(fù)制與深復(fù)制,是Python入門學(xué)習(xí)中的重要知識(shí),需要的朋友可以參考下
copy模塊用于對(duì)象的拷貝操作。該模塊非常簡(jiǎn)單,只提供了兩個(gè)主要的方法: copy.copy 與 copy.deepcopy ,分別表示淺復(fù)制與深復(fù)制。什么是淺復(fù)制,什么是深復(fù)制,網(wǎng)上有一卡車一卡車的資料,這里不作詳細(xì)介紹。復(fù)制操作只對(duì)復(fù)合對(duì)象有效。用簡(jiǎn)單的例子來(lái)分別介紹這兩個(gè)方法。
淺復(fù)制只復(fù)制對(duì)象本身,沒(méi)有復(fù)制該對(duì)象所引用的對(duì)象。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #coding=gbk import copy同樣的代碼,使用深復(fù)制,結(jié)果就不一樣:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 import copy l1 = [1, 2, [3, 4]] l2 = copy.deepcopy(l1) print l1 print l2 l2[2][0] = 50 print l1 print l2 #---- 結(jié)果 ---- [1, 2, [3, 4]] [1, 2, [3, 4]] [1, 2, [3, 4]] [1, 2, [50, 4]]改變copy的默認(rèn)行為
在定義類的時(shí)候,通過(guò)定義__copy__和__deepcopy__方法,可以改變copy的默認(rèn)行為。下面是一個(gè)簡(jiǎn)單的例子:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 class CopyObj(object): def __repr__(self): return "CopyObj" def __copy__(self): return "Hello" obj = CopyObj() obj1 = copy.copy(obj) print obj print obj1 #---- 結(jié)果 ---- CopyObj Hello新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注