天天看點

Python 标準類庫-資料類型之copy-深拷貝淺拷貝操作

标準類庫-資料類型之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群  

Python 标準類庫-資料類型之copy-深拷貝淺拷貝操作
Python 标準類庫-資料類型之copy-深拷貝淺拷貝操作
Python 标準類庫-資料類型之copy-深拷貝淺拷貝操作