開門見山,這幾者的區別:
-
直接賦值:其實就是對象的引用(別名)。
-
淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象。
-
深拷貝(deepcopy): copy 模塊的 deepcopy 方法,完全拷貝了父對象及其子對象。
淺拷貝舉例說明:
1 >>>a = {1: [1,2,3]} 2 3 >>> b = a.copy() 4 5 >>> a, b ({1: [1, 2, 3]}, {1: [1, 2, 3]}) 6 7 >>> a[1].append(4) 8 9 >>> a, b ({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
深拷貝舉例說明
1 >>>import copy 2 >>> c = copy.deepcopy(a) 3 >>> a, c 4 ({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]}) 5 >>> a[1].append(5) 6 >>> a, c 7 ({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})
解析
1、b = a: 賦值引用,a 和 b 都指向同一個對象。
2、b = a.copy(): 淺拷貝, a 和 b 是一個獨立的對象,但他們的子對象還是指向統一對象(是引用)。
b = copy.deepcopy(a): 深度拷貝, a 和 b 完全拷貝了父對象及其子對象,兩者是完全獨立的。