1.賦值(=),就是創建了對象的一個新的引用,修改其中任意一個變量都會影響到另一個。
In [168]: a Out[168]: [1, 2, 3] In [169]: b=a In [170]: a.append(4) In [171]: a Out[171]: [1, 2, 3, 4] In [172]: b Out[172]: [1, 2, 3, 4]
2.淺拷貝:創建一個新的對象,但它包含的是對原始對象中包含項的引用(copy模塊的copy()函數)
In [187]: import copy#copy淺拷貝,沒有拷貝子對象,所以原始數據改變,子對象會改變 In [188]: a=[1,2,3,4,['a','b']] In [189]: c=copy.copy(a) In [190]: a.append(5) In [191]: a Out[191]: [1, 2, 3, 4, ['a', 'b'], 5] In [192]: c Out[192]: [1, 2, 3, 4, ['a', 'b']] In [193]: a[4].append('c') In [194]: a Out[194]: [1, 2, 3, 4, ['a', 'b', 'c'], 5] In [195]: c Out[195]: [1, 2, 3, 4, ['a', 'b', 'c']]
3.深拷貝:創建一個新的對象,並且遞歸的復制它所包含的對象(修改其中一個,另外一個不會改變)(copy模塊的deep.deepcopy()函數)
In [196]: import copy In [197]: a=[1,2,3,4,['a','b']] In [198]: c=copy.deepcopy(a) In [199]: a.append(5) In [200]: a Out[200]: [1, 2, 3, 4, ['a', 'b'], 5] In [201]: c Out[201]: [1, 2, 3, 4, ['a', 'b']] In [202]: a[4].append('c') In [203]: a Out[203]: [1, 2, 3, 4, ['a', 'b', 'c'], 5] In [204]: c Out[204]: [1, 2, 3, 4, ['a', 'b']]
綜上所述,淺copy和深copy:
copy淺拷貝(copy.copy()),沒有拷貝子對象,所以原始數據改變,子對象會改變
深copy的相同在於(copy.deepcopy()),包含對象里面的自對象的拷貝,所以原始對象的改變不會造成深拷貝里任何子元素的改變
它們的相同之處是,父對象都沒有改變!