第二章 資料結構 copy 複製物件 深副本

2021-09-10 18:17:00 字數 1168 閱讀 3383

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 還學習了順序表 單...