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 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....