标準類庫-資料類型之copy-深拷貝淺拷貝操作
by:授客 QQ:1033553122
Python中指派并不會拷貝對象,隻是建立目标和對象的綁定關系。
copy.copy(x)
傳回x的淺拷貝
copy.deepcopy(x)
傳回x的深拷貝
exception copy.error
抛出子產品指定的錯誤
例子
>>> import copy
>>> lista = [["hi", "shouke"], 2018]
>>> listb = copy.copy(lista)
>>> id(lista), id(listb)
(40713288, 51361160)
>>> for item in lista:
... print(id(item))
...
51361032
3944400
>>> for item in listb:
如上,淺拷貝,拷貝的對象及被拷貝對象(例中分别為listb, lista)的id都不一樣,但是兩者所擁有的元素對象的id值是一樣的
對比試驗
>>> listb = copy.deepcopy(lista)
>>> for item in listb:
...
print(id(item))
51300488
如上,深拷貝,拷貝的對象及被拷貝對象(例中分别為listb, lista)的id都不一樣,兩者所擁有的元素對象的id值:
1)如果是不可變對象,比如例中的整數,兩者的id一樣
2)如果是可變對象,比如例子中的清單(["hi",
"shouke"]),則兩者的id值不一樣。
修改被拷貝對象的元素對象
>>> lista[0].append('nihao')
>>> lista
[['hi', 'shouke', 'nihao'], 2018]
>>> listb
[['hi', 'shouke'], 2018]
如上,深拷貝,拷貝的對象及被拷貝對象兩者互不影響
>>> listb = copy.copy(lista)
>>> lista[0].remove('nihao')
如上,類似c語言,淺拷貝,被拷貝對象擁有可變元素對象時,拷貝的對象及被拷貝對象兩者會互相影響
作者:授客
QQ:1033553122
全國軟體測試QQ交流群:7156436
Git位址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額随意,您的支援将是我繼續創作的源動力,打賞後如有任何疑問,請聯系我!!!
微信打賞
支付寶打賞 全國軟體測試交流QQ群