1. 程式人生 > >深拷貝,淺拷貝

深拷貝,淺拷貝

 1a = [11,22,33]#創造了一個實體[11,22,33],此時a指向這個實體,a可以
 2#叫做源物件
 3b = a    #b也指向實體[11,22,33],b就叫做拷貝物件
 4#!!!淺拷貝源物件與拷貝物件共用一份實體,僅僅時引用的變數的不同
 5id(a)#輸出為2310978997768
 6id(b)#輸出為2310978997768,淺拷貝的id號一樣
 7
 8
 9
10import copy
11c = copy.deepcopy(a)
12id(c)#輸出為2310989166984,與a 的id號不一樣
13a.append(44)
14a  #輸出為[11, 22, 33, 44]
15b  #[11, 22, 33, 44] 表明深拷貝時拷貝物件和源物件彼此獨立
16c  #[11, 22, 33]
17#深拷貝時拷貝物件和源物件彼此獨立,任何一個物件的改動對另一個不會造成影響

copy.deecopy()

1import copy
2c = [1,2,3,4]
3f = [5,6,7]
4t1 = [c,f]
5g = copy.deepcopy(t1)
6f.append(10)
7f  #輸出為[5, 6, 7, 10]
8g[1]  #輸出為[5, 6, 7]這二行可以看出當深拷貝一個物件時,若此物件裡面還有
9                                     #引用時,都會依次進行深拷貝

copy.copy()

 1t1 = [c,f]
 2t2 = (c,f)
 3m1 = copy.copy(t1)
 4m2 = copy.copy(t2)
 5id(t1)  #輸出為2783225450120
 6id(m1)  #輸出為2783225170312
 7id(m2)  #輸出為2783223573000
 8id(t2)  #輸出為2783223573000
 9
10#因此可以看出當copy.copy的物件可變時會進行拷貝,若該物件裡面還有引用時直接指向就行,而不再進行拷貝,
11#若拷貝的物件不可變時,直接指向該物件,而不再拷貝