淺拷貝
- 類(lèi)似于對(duì)于引用的拷貝
In [1]: a = [11,22,33]
In [2]: b = [44,55,66]
In [3]: c = [a,b]
In [4]: c
Out[4]: [[11, 22, 33], [44, 55, 66]]
In [5]: d = c
In [6]: d
Out[6]: [[11, 22, 33], [44, 55, 66]]
In [7]: c
Out[7]: [[11, 22, 33], [44, 55, 66]]
In [8]: id(d)
Out[8]: 4366797352
In [9]: id(c)
Out[9]: 4366797352
In [10]: c[0].append(44)
In [11]: c
Out[11]: [[11, 22, 33, 44], [44, 55, 66]]
In [12]: d
Out[12]: [[11, 22, 33, 44], [44, 55, 66]]
In [13]: id(c)
Out[13]: 4366797352
In [14]: id(d)
Out[14]: 4366797352
深拷貝
- 完全拷貝了一個(gè)副本
In [1]: import copy
In [2]: a = [11,22,33]
In [3]: b = [33,44,55]
In [4]: c = [a,b]
In [5]: e = copy.deepcopy(c)
In [6]: c
Out[6]: [[11, 22, 33], [33, 44, 55]]
In [7]: e
Out[7]: [[11, 22, 33], [33, 44, 55]]
In [8]: id(c)
Out[8]: 4431089464
In [9]: id(e)
Out[9]: 4429576528
In [10]: c[0].append(44)
In [11]: c
Out[11]: [[11, 22, 33, 44], [33, 44, 55]]
In [12]: e
Out[12]: [[11, 22, 33], [33, 44, 55]]
In [13]: id(c)
Out[13]: 4431089464
In [14]: id(e)
Out[14]: 4429576528
其他淺拷貝匿又,如:copy.copy
- 特別要主要拷貝的對(duì)象是可變類(lèi)型還是不可變類(lèi)型
不可變類(lèi)型
In [1]: import copy
In [2]: a = (11,22,33,[44,55])
In [3]: b = copy.copy(a)
In [4]: a
Out[4]: (11, 22, 33, [44, 55])
In [5]: b
Out[5]: (11, 22, 33, [44, 55])
In [6]: id(a)
Out[6]: 4427232456
In [7]: id(b)
Out[7]: 4427232456
In [8]: a[3].append(66)
In [9]: a
Out[9]: (11, 22, 33, [44, 55, 66])
In [10]: b
Out[10]: (11, 22, 33, [44, 55, 66])
In [11]: id(a)
Out[11]: 4427232456
In [12]: id(b)
Out[12]: 4427232456
In [13]: id(a[3])
Out[13]: 4427525224
In [14]: id(b[3])
Out[14]: 4427525224
可變類(lèi)型
In [1]: import copy
In [2]: a = [11,22,33,(44,55)]
In [3]: b = copy.copy(a)
In [4]: a
Out[4]: [11, 22, 33, (44, 55)]
In [5]: b
Out[5]: [11, 22, 33, (44, 55)]
In [6]: id(a)
Out[6]: 4337742480
In [7]: id(b)
Out[7]: 4336618168
In [8]: a.append(66)
In [9]: a
Out[9]: [11, 22, 33, (44, 55), 66]
In [10]: b
Out[10]: [11, 22, 33, (44, 55)]
In [11]: id(a)
Out[11]: 4337742480
In [12]: id(b)
Out[12]: 4336618168
copy.copy針對(duì)copy的對(duì)象是否是可變類(lèi)型會(huì)不一樣希柿,如果拷貝的是可變類(lèi)型,那么重新再內(nèi)存中開(kāi)辟地址毅整,并將值拷貝過(guò)去功咒;如果是不可變類(lèi)型跋理,那么只會(huì)拷貝一份引用,但是如果不可變類(lèi)型中還有可變類(lèi)型比默,如:(11,22,33,[44,55]),在[44,55]中append值盆犁,兩個(gè)對(duì)象的值都會(huì)變命咐,因?yàn)樗麄冎赶虻氖峭环菀?/p>