python中淺拷貝和深拷貝的區別

2022-04-29 09:09:06 字數 1619 閱讀 6179

淺拷貝呼叫copy模組下的copy()方法-----> b = copy.copy(a) #a為初始物件,b為淺拷貝物件

深拷貝呼叫copy模組下的deepcopy()方法------> b = copy.deepcopy(a)#a為初始物件,b為深拷貝物件

import

copy

list1 = [[1,2],'

abc'

]list2 =copy.copy(list1)

list3 =copy.deepcopy(list1)

print('

原始物件:

' + str(list1) + '

# 其中第乙個元素[1,2]為可變元素')

print('

'+ str(id(list1)) + '

' +str(id(list1[0])))

print('

淺拷貝物件:

' +str(list2))

print('

'+ str(id(list2)) + '

' +str(id(list2[0])))

print('

深拷貝物件:

' +str(list3))

print('

' + str(id(list3)) + '

' +str(id(list3[0])))

print('

-------原始物件中的列表改變----------')

print('

改變後原始物件:

' +str(list1))

print('

'+ str(id(list1)) + '

' +str(id(list1[0])))

print('

改變後淺拷貝物件:

' +str(list2))

print('

'+ str(id(list2)) + '

' +str(id(list2[0])))

print('

改變後深拷貝物件:

' +str(list3))

print('

' + str(id(list3)) + '

' + str(id(list3[0])))

view code

**執行結果如下:

可以看出淺拷貝和深拷貝後物件位址都會發生變化

不同的是如果原始物件中有可變元素(如上圖中的列表[1,2]),淺拷貝後可變元素位址一樣,而深拷貝後可變元素位址不一樣

所以當初始物件中的可變元素發生改變時(如在列表中增加元素),淺拷貝物件也會發生變化,而深拷貝物件不會

python的預設拷貝方式是淺拷貝,因為花費時間更短、使用記憶體更少、效率更高。

詳細點可以看:

python中的淺拷貝和深拷貝

不得不說 python核心程式設計 是一本好書,看到其中一節做一下隨筆。在python中,當建立乙個物件後,然後把它賦給另乙個物件時,python並沒有去拷貝這個物件,而是拷貝了這個物件的引用。看不懂沒關係,我們看乙個例子。raw list first second 12 32 copy list ...

python中的深拷貝和淺拷貝

淺拷貝 copy 不拷貝物件的內容,僅僅拷貝子物件的引用 深拷貝 deepcopy 會連同拷貝子物件的記憶體,對子物件的修改不會影響源物件 下面用 來測試 import copy deftest copy 淺拷貝測試 a 10 20,5,6 b copy.copy a print a a,end t...

python中的淺拷貝和深拷貝

本篇介紹下python中的深拷貝和淺拷貝,主要從基本型別 類 不可變型別等方面進行介紹。1.介紹拷貝之前首先應該明白is和 的區別,即is表示同乙個物件,比較的是值 a 1000 b 1000 a b true a is bfalse class person object def init sel...