淺copy 所謂「淺拷貝」,是指建立一個新的對象,其內容是原對象中元素的引用。(拷貝組合對象,不拷貝子對象)我的理解,關鍵是根據子元素的指向地址是否同樣來判斷函數
注意:淺拷貝和深拷貝的不一樣僅僅是對組合對象來講,所謂的組合對象就是包含了其它對象的對象,如列表,類實例。而對於數字、字符串以及其它「原子」類型,沒有拷貝一說,產生的都是原對象的引用。 常見的淺拷貝有:切片操做、工廠函數、對象的copy()方法、copy模塊中的copy函數。 深copy 所謂「深拷貝」,是指建立一個新的對象,而後遞歸的拷貝原對象所包含的子對象。深拷貝出來的對象與原對象沒有任何關聯。 注意若是子元素是不可變對象時,深copy對象的子元素所對應的指向地址會和原對象子元素同樣 可是相互獨立的, 下面的這個例子中子元素是可變的對象對象
import copy a = [[1, 2],[5, 6], [8, 9]] b = copy.copy(a) # 淺拷貝獲得b c = copy.deepcopy(a) # 深拷貝獲得c 深拷貝只有一種方式:copy模塊中的deepcopy函數。 import copy a = [1, 2, 3] b = copy.deepcopy(a) print(id(a), id(b)) 140601785065840 140601785066200 總結:遞歸
一、賦值:簡單地拷貝對象的引用,兩個對象的id相同。 二、淺拷貝:建立一個新的組合對象,這個新對象與原對象共享內存中的子對象。 三、深拷貝:建立一個新的組合對象,同時遞歸地拷貝全部子對象,新的組合對象與原對象沒有任何關聯。雖然實際上會共享不可變的子對象,但不影響它們的相互獨立性。內存
淺拷貝和深拷貝的不一樣僅僅是對組合對象來講,所謂的組合對象就是包含了其它對象的對象,如列表,類實例。而對於數字、字符串以及其它「原子」類型,沒有拷貝一說,產生的都是原對象的引用。字符串