2.9.2 深副本
deepcopy()建立的深副本是乙個新容器,其中填充了原物件內容的副本。要建立乙個list的深副本,會構造乙個新的list,複製原列表的元素,然後將這些副本追加到新列表。
將前例中的copy()呼叫替換為deepcopy(),可以清楚地看出輸出的不同。
import copy
import functools
@functools.total_ordering
class
myclass
:def
__init__
(self,name)
: self.name = name
def__eq__
(self,other)
:return self.name == other.name
def__gt__
(self,other)
:return self.name > other.name
a = myclass(
'a')
my_list =
[a]dup = copy.deepcopy(my_list)
print
(' my_list:'
,my_list)
print
(' dup:'
,dup)
print
(' dup is my_list:'
,(dup is my_list)
)print
(' dup == my_list:'
,(dup == my_list)
)print
('dup[0] is my_list[0]:'
,(dup[0]
is my_list[0]
))print
('dup[0] == my_list[0]:'
,(dup[0]
== my_list[0]
))
列表的第乙個元素不再是相同的物件引用,不過比較這兩個物件時,仍認為它們是相等的。
執行結果:
第二章 資料結構 copy 複製物件 定製複製行為
2.9.3 定製複製行為 可以使用特殊方法 copy 和 deepcopy 來控制如何建立副本。呼叫 copy 而不提供任何引數,這會返回物件的乙個淺副本。呼叫 deepcopy 並提供乙個備忘字典,這會返回物件的乙個深副本。所有需要深複製的成員屬性都要連同備忘字典傳遞到copy.deepcopy ...
第二章 資料結構 二
知識點 trie樹 並查集,堆的操作 高效地儲存和查詢字串集合的資料結構 const int n 100010 int son n 26 cnt n idx 插入 void insert char str cnt p 以這個點結尾的字元數 查詢 intquery char str return cn...
資料結構 第二章總結
線性表是由n 0 個資料元素組成的有限序列。我們學習了線性表上定義的基本運算 有構造空表 initlist l 求表長 listlength l 取結點 getnode l i 查詢 locatenode l x 插入 insertlist l x,i 刪除 delete l i 還學習了順序表 單...