python深淺拷貝

2021-10-20 17:18:08 字數 2360 閱讀 2829

copy , deepcopy 拷貝不可以變型別的資料, 只是引用了該資料的記憶體位址, 沒有建立新的記憶體位址

不可變型別: int , str, bool, tuple

可變型別: list, dict, set

copy, deepcopy: 如果拷貝不可變型別資料: 深淺拷貝, 首先 都會生成乙個新的位址, 如果裡面的元素是不可變資料, 深拷貝不會生成新的元素記憶體位址, 如果元素是可變型別的, 深拷貝, 會生成乙個新的記憶體位址,

淺拷貝不會對於可變元素, 生成與新的記憶體位址

a =

'hello word'

b = copy.copy(a)

c = copy.deepcopy(a)

print(id

(a),

id(b),id

(c))

_tuple =(1

,2,3

)a_tuple = copy.copy(_tuple)

b_tuple = copy.deepcopy(_tuple)

print(id

(_tuple),id

(a_tuple),id

(b_tuple)

)

_list =[1

,2,3

,4]a_list = copy.copy(_list)

b_list = copy.copy(_list)

# 操作可變型別的資料, 深淺拷貝, 都會生成乙個新的記憶體位址, 但裡面不可以變資料型別的記憶體位址不會發生改變

# 結果 1453464809672 1453464809928 1453464811080

print(id

(_list),id

(a_list),id

(b_list)

)# 結果 1453464809672 1453464809928 1453464811080

print(id

(_list[0]

),id(a_list[0]

),id(b_list[0]

))

# 如果 不可變資料型別中, 含有可變資料型別的資料,: 淺拷貝: 會生成乙個新的記憶體位址, 資料都是指向原來的記憶體位址

# 深拷貝: 首先生成乙個記憶體位址, 原先資料中的不可變資料, 記憶體位址不會發生改變, 可變資料; 記憶體位址也會生成乙個新的, 然後不可變資料記憶體位址不變

_tup =(1

,2,3

,[4,

5,6]

)a_tup = copy.copy(_tup)

b_tup = copy.deepcopy(_tup)

# 1515611964584 1515611964584 1515611964664

print(id

(_tup),id

(a_tup),id

(b_tup)

)# 1895590944 1895590944 1895590944

print(id

(_tup[0]

),id(a_tup[0]

),id(b_tup[0]

))# 1515612337672 1515612337672 1515612337544

print(id

(_tup[3]

),id(a_tup[3]

),id(b_tup[3]

))# 1895591040 1895591040 1895591040

print(id

(_tup[3]

[0])

,id(a_tup[3]

[0])

,id(b_tup[3]

[0])

)

_lt =[1

,2,3

,[4,

5,6]

]a_lt = copy.copy(_lt)

b_lt = copy.deepcopy(_lt)

# 2564989646280 2564989646088 2564989646024

print(id

(_lt),id

(a_lt),id

(b_lt)

)# 1895590944 1895590944 1895590944

print(id

(_lt[0]

),id(a_lt[0]

),id(b_lt[0]

))# 1895590944 1895590944 1895590944

print(id

(_lt[3]

),id(a_lt[3]

),id(b_lt[3]

))

python 深淺拷貝案例 python 深淺拷貝

深淺拷貝 對於 數字 和 字串 而言,賦值 淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址 import copy a1 22255 a2 22255 print id a1 id a2 3428240 3428240 對於字典 元祖 列表 而言,進行賦值 淺拷貝和深拷貝時,其記憶體位址的變化...

python 深淺拷貝

建立乙個寬度為3,高度為4的陣列 mylist 0 3 4 0,0,0 0,0,0 0,0,0 0,0,0 但是當操作mylist 0 1 1時,發現整個第二列都被賦值,變成 0,1,0 0,1,0 0,1,0 0,1,0 list n n shallow copies of list concat...

python深淺拷貝

python 深淺拷貝 shallow copy 和 deep copy 對於乙個列表,列表裡面可以再放入乙個列表 1 若想複製這乙個列表,使用列表的普通的copy 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....