python高階 深淺拷貝 16

2022-09-16 18:57:11 字數 2145 閱讀 1006

淺拷貝是對乙個物件的頂層拷貝,通俗地講就是:拷貝了引用,並沒有拷貝內容。

a = [1,2,3]

print

(id(a))

b=aprint

(b)print

(id(b))

print

(a)print(b)

執行結果為:

1965053928072[1, 2, 3]

1965053928072[1, 2, 3, 4]

[1, 2, 3, 4]

深拷貝是對於乙個物件所有層次的拷貝,重新開闢記憶體位址。

import

copy

a = [1,2,3]

print

(id(a))

#使用copy模組

b =copy.deepcopy(a)

#列印b的記憶體位址

print

(id(b))

print

(a)print(b)

執行結果為:

2035157969672

2035158105992[1, 2, 3, 4]

[1, 2, 3]

import

copy

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

import

copy

a = [1,2,3]

b =copy.copy(a)

print

(id(a))

print

(id(b))

print

(a)print(b)

執行結果為:

1626677717832

1626677715784[1, 2, 3, 4]

[1, 2, 3]

2、不可變型別使用copy

import

copy

a = (1,2,3)

b =copy.copy(a)

print

(id(a))

print(id(b))

執行結果為:

2043444280704

2043444280704

總結:

Python高階 深淺拷貝

python高階 深淺拷貝 深淺拷貝 1 深拷貝 深拷貝就是將所有的都進行拷貝,包括內層,深拷貝屬於遞迴拷貝,很是耗費記憶體。2 淺拷貝 淺拷貝就是只拷貝最外面一層,子物件會受到原始資料的影響,但是前拷貝節約記憶體,浪費少。3 物件的拷貝 引用傳遞不是拷貝,引用傳遞是位址的拷貝。4 拷貝格式 匯入模...

python高階 深淺拷貝

is與的區別 在講is和這兩種運算子區別之前,首先要知道python中物件包含的三個基本要素,分別是 id 身份標識 type 資料型別 和value 值 is和 都是對物件進行比較判斷作用的,但對物件比較判斷的內容並不相同。下面來看看具體區別在哪。比較操作符和is同一性運算子區別 是python標...

Python高階 深淺拷貝

定義 對於乙個物件的頂層拷貝 拷貝引用,不拷貝資料 對於 不可 變型別 number string tuple,淺複製僅僅是位址指向,不會開闢新空間 對於 可 變型別 list dictionary set,淺複製會開闢新的空間位址 僅僅是最頂層開闢了新的空間,裡層的元素位址還是一樣的 進行淺拷貝 ...