a =
["value1"
,"value2"
]b = a
id(a)
id(b)
這裡記憶體分配了一塊位址為這個列表,然後a指向這塊位址,第二行**意思是
讓b也指向建立的列表,此時,a和b指向同一塊記憶體空間,所以id(a)=id(b)。
import copy
a =[1,
2]b =[a,3,
4]c = copy.copy(b)
print(id
(a))
print(id
(b))
print(id
(c))
print(id
(b[0])
)print(id
(c[0])
)5)print
(b)print
(c)# 輸出結果
# id(a)
# 1362057885768
# id(b)
# 1362057885640
# id(c)
# 1362057823560
# id(b[0])
# 1362057885768
# id(c[0])
# 1362057885768
# print(b)
# [[1, 2, 5], 3, 4]
# print(c)
# [[1, 2, 5], 3, 4]
從結果可以看出,b和c的id位址不一樣,c重新指向了一塊空間,但是比較b[0]和
加值,發現輸出來的b,c也隨著變化了,這就是淺拷貝,拷貝的不夠徹底。
import copy
a =[1,
2]b =[a,3,
4]c = copy.deepcopy(b)
print(id
(a))
print(id
(b))
print(id
(c))
print(id
(b[0])
)print(id
(c[0])
)5)print
(b)print
(c)# 輸出結果
# id(a)
# 1317602461064
# id(b)
# 1317602515208
# id(c)
# 1317602515272
# id(b[0])
# 1317602461064
# id(c[0])
# 1317602514824
# print(b)
# [[1, 2, 5], 3, 4]
# print(c)
# [[1, 2], 3, 4]
通過觀察**發現,id(a)和id(b[0])指向同一塊記憶體位址,但是id(c[0])卻和
它們不一樣了,c[0]重新指向了新的一塊位址,所以無論a怎麼變化,都不會影響到
c,也可以這麼說,c與a,b沒有了任何關係。於是深拷貝就是比淺拷貝更加徹底。
對於像元組這樣的不可變型別進行深淺拷貝的時候需注意,廢話不多說,上**:
import copy
a =(1,
2)b = copy.copy(a)
c = copy.deepcopy(a)
print(id
(a))
print(id
(b))
print(id
(c))
# 輸出結果
# id(a)
# 2579250860296
# id(b)
# 2579250860296
# id(c)
# 2579250860296
可見結果中三個位址一樣,所以說明對於元組這種不可變型別,它不會重新再在記憶體
中建立乙個元組物件,深淺拷貝就相當於讓b,c指向a所指向的記憶體位址。
需要我們注意的是,此時,元組中的元素是不可變型別。那要是把一些可變型別當作
元組的元素呢?**如下:
import copy
a =[1,
2]b =[3,
4]c =(a, b)
d = copy.copy(c)
e = copy.deepcopy(c)
print(id
(a))
print(id
(b))
print(id
(c))
print(id
(d))
print(id
(e))5)
print
(a)print
(c)print
(d)print
(e)# 輸出結果
# print(id(a))
# 1522131609608
# print(id(b))
# 1522131609480
# print(id(c))
# 1522131610952
# print(id(d))
# 1522131610952
# print(id(e))
# 1522131631560
# a# [1, 2, 5]
# c# ([1, 2, 5], [3, 4])
# d# ([1, 2, 5], [3, 4])
# e# ([1, 2], [3, 4])
結果可以看到,當元組的元素變為不可變型別之後,淺拷貝相當於引用,讓c和d指
向同一塊記憶體位址,深拷貝的話,就是徹底拷貝了。e和前面的變數就沒有關聯了。
作為一名以後的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...