Python里面如何拷貝一個對象


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()),包含對象里面的自對象的拷貝,所以原始對象的改變不會造成深拷貝里任何子元素的改變

       它們的相同之處是,父對象都沒有改變!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM