import copy new_list = copy.copy(existing_list) 有些時候,你希望對象中的屬性也被復(fù)制,可以使用deepcopy import copy new_list_of_dicts = copy.deepcopy(existing_list_of_dicts) 當(dāng)你對一個對象賦值的時候(做為參數(shù)傳遞,或者做為返回值) Python的行為很簡單,迅速,而且一致.然而,如果你需要一個對象拷貝而并沒有顯式的寫出來,會出現(xiàn)問題的 >>> a = [1, 2, 3]在這里,變量a和b都指向同一個對象(一個列表),所以 注意: 要想成為一個Python高手,首先要注意的問題就是對象的變更操 如 果你想修改一個對象,而且想讓原始的對象不受影響,那你就需要對象復(fù)制.正如本節(jié)說的一樣,你可以使用copy模塊中的兩個方法來實現(xiàn)需求.一般的,可以 使用copy.copy,它可以進行對象的淺復(fù)制(shallow copy),它復(fù)制了對象,但對于對象中的元素,依然使用引用. 淺復(fù)制,有時無法獲得一個和原來對象完全一致的副本 >>> list_of_lists = [ ['a'], [1, 2], ['z', 23] ] >>> copy_lol = copy.copy(lists_of_lists) >>> copy_lol[1].append('boo') >>> print list_of_lists, copy_lol [['a'], [1, 2, 'boo'], ['z', 23]] [['a'], [1, 2, 'boo'], ['z', 23]] 在這里,變量list_of_lists,copy 如果你希望復(fù)制一個容器對象,以及它里面的所有元素 對于一般的淺拷貝,使用copy.copy就可以了,當(dāng)然,你需要了解你要拷貝的對象.要復(fù)制列表L,使用list(L),要復(fù)制一個字典d,使用dict(d) 要復(fù)制一個別的類型,無論是你自己寫的還是使用庫中的,使用copy.copy,如果你自己寫一個類,沒有必要費神去寫clone和copy函數(shù) 注意你不用復(fù)制不可修改對象(string,數(shù)字,元組),因為你不用擔(dān)心修改它們.如果你想嘗試一下復(fù)制,依然會得到原來的.雖然無傷大雅,不過真的浪費盡力: >>> s = 'cat' >>> t = copy.copy(s) >>> s is t True is操作符用于不僅判斷兩個對象是否完全一致,而且是同一個對象 注意: 你可以使用另一種拷貝方式,給定一個列表L,無論是完整切片L[ 對于dict,你可能見過下面的復(fù)制方法: >>> for somekey in d: ... d1[somekey] = d[somekey] 或者更簡單一些的方法,d1={},d1.update(d),無論怎樣,這些代碼都是缺乏效率的,使用d1=dict 相關(guān)說明: copy(x) Shallow copy operation on arbitrary Python objects. See the module's __doc__ string for more info. deepcopy(x, memo=None, _nil=[]) Deep copy operation on arbitrary Python objects. See the module's __doc__ string for more info. |
|
來自: OneDayDayUp > 《Python》