Python淺複製中物件生存週期例項分析

2022-10-04 10:21:12 字數 878 閱讀 7515

python的淺複製以及深複製我了解的並不多,我不清楚shutil中的copy1程式設計客棧和copy2是不是算是淺複製和深複製?這兩個操作,乙個是檔案屬性重建,還有乙個是文www.cppcns.com件屬性不變。不知道物件的複製是否可以以此模擬程式設計客棧?

在複製之前,為了能夠**一下gc的執行,定義乙個特殊的類和物件。測試**如下:

class demo:

def __del__(self):

print("removing".format(id(self)))

x = demo()

del x

程式執行結果如下:

e:\01_work程式設計客棧space\02_programme_language\03_python\03_oop\2017\08>pythoncopy1.py

removing1772226785520

接下來構造淺複製的例子:

>>>obj_list1 = [demo(),demo()]

>>>obj_list2 = obj_list1[:]

>>> del obj_list1

>>> del obj_list2

removing1902510644416

removing1902510644360

從上面的結果看,第一次del並沒有觸發物件銷毀的方法執行。這是在互動介面中進行除錯出現的結果,如果**是寫到乙個具體的檔案中,那麼程式執行的結果有可能不同。當所有的語句都寫到同乙個檔案中的時候,檔案中的物件作用域會有輕微的調整。這是值得我們注意的。

另一種常見的淺複製方法:

>>> o1 =o2 = demo()

>>> del o1

>>> del o2

removing1902510136568

C 中物件生存週期

在c 中,我們所使用的的物件都有嚴格的生存週期。所謂的物件生存週期是指物件從建立開始到被釋放為止的時間。對於靜態記憶體中儲存的區域性static物件 類static資料成員以及定義在任何函式之外的變數,全域性物件 任何函式之外的物件 在程式啟動時分配,在程式結束時銷毀 對於區域性static物件 類...

python中深複製與淺複製

從定義上來說 1 copy.copy 是淺複製,只拷貝父物件,不會拷貝物件的內部的子物件。2 copy.deepcopy 是深複製,拷貝物件及其子物件。import copy a 1,2,3,4,a b 原始物件 b a 賦值,傳物件的引用 c copy.copy a 物件拷貝,淺拷貝 d copy...

Python中的深淺複製

最近遇到了乙個問題,在python中對於物件的複製有兩種,copy 以及deepcopy 為了研究他們之間的區別,寫下如下部落格。首先檢視python的官方文件,得到如下解釋 淺層複製和深層複製之間的區別僅與復合物件 即包含其他物件的物件,如列表或類的例項 相關 乙個 淺層複製 會構造乙個新的復合物...