淺拷貝是對乙個物件的頂層拷貝,通俗地講就是:拷貝了引用,並沒有拷貝內容。
a = [1,2,3](id(a))
b=aprint
(b)print
(id(b))
(a)print(b)
執行結果為:
1965053928072[1, 2, 3]1965053928072[1, 2, 3, 4]
[1, 2, 3, 4]
深拷貝是對於乙個物件所有層次的拷貝,重新開闢記憶體位址。
importcopy
a = [1,2,3]
(id(a))
#使用copy模組
b =copy.deepcopy(a)
#列印b的記憶體位址
(id(b))
(a)print(b)
執行結果為:
20351579696722035158105992[1, 2, 3, 4]
[1, 2, 3]
importcopy
a = [1,2,3]
b = [4,5,6]
c =[a,b]
d = c #
直接賦值,淺拷貝
print("
"%id(c))
print("
"%id(d))
#使用copy模組
#深拷貝,重新開闢記憶體,並內容獨立
e =copy.deepcopy(c)
#深拷貝,重新開闢記憶體,但是新內容裡面仍儲存原來的引用
f =copy.copy(c)
#列印e,f的位址
print("
"%id(e))
print("
"%id(f))
#改變a的值
#列印a,b,c,d,e,f
print("
a = %s
"%a)
print("
b = %s
"%b)
print("
c = %s
"%c)
print("
d = %s
"%d)
print("
e = %s
"%e)
print("
f = %s
"%f)
執行結果為:
c的記憶體位址為:2514746494856d的記憶體位址為:2514746494856e的記憶體位址為:2514746494920f的記憶體位址為:2514746494664a = [1, 2, 3, 44]b = [4, 5, 6]
c = [[1, 2, 3, 44], [4, 5, 6]]
d = [[1, 2, 3, 44], [4, 5, 6]]
e = [[1, 2, 3], [4, 5, 6]]
f = [[1, 2, 3, 44], [4, 5, 6]]
說明:1、可變型別使用copy
importcopy
a = [1,2,3]
b =copy.copy(a)
(id(a))
(id(b))
(a)print(b)
執行結果為:
16266777178321626677715784[1, 2, 3, 4]
[1, 2, 3]
2、不可變型別使用copy
importcopy
a = (1,2,3)
b =copy.copy(a)
(id(a))
print(id(b))
執行結果為:
20434442807042043444280704
總結:
Python高階 深淺拷貝
python高階 深淺拷貝 深淺拷貝 1 深拷貝 深拷貝就是將所有的都進行拷貝,包括內層,深拷貝屬於遞迴拷貝,很是耗費記憶體。2 淺拷貝 淺拷貝就是只拷貝最外面一層,子物件會受到原始資料的影響,但是前拷貝節約記憶體,浪費少。3 物件的拷貝 引用傳遞不是拷貝,引用傳遞是位址的拷貝。4 拷貝格式 匯入模...
python高階 深淺拷貝
is與的區別 在講is和這兩種運算子區別之前,首先要知道python中物件包含的三個基本要素,分別是 id 身份標識 type 資料型別 和value 值 is和 都是對物件進行比較判斷作用的,但對物件比較判斷的內容並不相同。下面來看看具體區別在哪。比較操作符和is同一性運算子區別 是python標...
Python高階 深淺拷貝
定義 對於乙個物件的頂層拷貝 拷貝引用,不拷貝資料 對於 不可 變型別 number string tuple,淺複製僅僅是位址指向,不會開闢新空間 對於 可 變型別 list dictionary set,淺複製會開闢新的空間位址 僅僅是最頂層開闢了新的空間,裡層的元素位址還是一樣的 進行淺拷貝 ...