本文實例講述了Python淺復(fù)制中對象生存周期。分享給大家供大家參考,具體如下:
Python的淺復(fù)制以及深復(fù)制我了解的并不多,我不清楚shutil中的copy1和copy2是不是算是淺復(fù)制和深復(fù)制?這兩個操作,一個是文件屬性重建,還有一個是文件屬性不變。不知道對象的復(fù)制是否可以以此類比?
在復(fù)制之前,為了能夠觀看一下GC的執(zhí)行,定義一個特殊的類和對象。測試代碼如下:
class Demo: def __del__(self): print("Removing{0}".format(id(self)))x = Demo()del x程序執(zhí)行結(jié)果如下:
E:/01_workspace/02_programme_language/03_python/03_OOP/2017/08>pythoncopy1.py
Removing1772226785520
接下來構(gòu)造淺復(fù)制的例子:
>>>obj_list1 = [Demo(),Demo()]>>>obj_list2 = obj_list1[:]>>> del obj_list1>>> del obj_list2Removing1902510644416Removing1902510644360
從上面的結(jié)果看,第一次del并沒有觸發(fā)對象銷毀的方法執(zhí)行。這是在交互界面中進行調(diào)試出現(xiàn)的結(jié)果,如果代碼是寫到一個具體的文件中,那么程序執(zhí)行的結(jié)果有可能不同。當(dāng)所有的語句都寫到同一個文件中的時候,文件中的對象作用域會有輕微的調(diào)整。這是值得我們注意的。
另一種常見的淺復(fù)制方法:
>>> o1 =o2 = Demo()>>> del o1>>> del o2Removing1902510136568
希望本文所述對大家Python程序設(shè)計有所幫助。
新聞熱點
疑難解答
圖片精選