copy模組用於對象的拷貝操作。該模組非常簡單,只提供了兩個主要的方法:
copy.copy
與
copy.deepcopy
,分別表示淺複製與深複製。什麼是淺複製,什麼是深複製,網上有一卡車一卡車的資料,這裡不作詳細介紹。複製操作只對綜合物件有效。用簡單的例子來分別介紹這兩個方法。
淺複製只複製對象本身,沒有複製該對象所引用的對象。
#coding=gbk<br />import copy<br />l1 = [1, 2, [3, 4]]<br />l2 = copy.copy(l1)<br />print l1<br />print l2<br />l2[2][0] = 50<br />print l1<br />print l2<br />#---- 結果 ----<br />[1, 2, [3, 4]]<br />[1, 2, [3, 4]]<br />[1, 2, [50, 4]]<br />[1, 2, [50, 4]]
同樣的代碼,使用深複製,結果就不一樣:
import copy<br />l1 = [1, 2, [3, 4]]<br />l2 = copy.deepcopy(l1)<br />print l1<br />print l2<br />l2[2][0] = 50<br />print l1<br />print l2<br />#---- 結果 ----<br />[1, 2, [3, 4]]<br />[1, 2, [3, 4]]<br />[1, 2, [3, 4]]<br />[1, 2, [50, 4]]
改變copy的預設行為
在定義類的時候,通過定義__copy__和__deepcopy__方法,可以改變copy的預設行為。下面是一個簡單的例子:
class CopyObj(object):<br /> def __repr__(self):<br /> return "CopyObj"</p><p> def __copy__(self):<br /> return "Hello"<br />obj = CopyObj()<br />obj1 = copy.copy(obj)<br />print obj<br />print obj1<br />#---- 結果 ----<br />CopyObj<br />Hello