Python 引用指向 淺拷貝與深拷貝

2021-08-25 22:59:47 字數 1297 閱讀 8216

又稱賦值,即(=)

就是建立了物件的乙個新的引用,修改其中任意乙個變數都會影響到另乙個。

引用指向的耦合度100

a = b

id(a) = id(b)

淺拷貝:

就是建立乙個新的物件,但它包含的是對原始物件中包含項的引用

淺拷貝的耦合度是0-100之間

>>> import copy

>>> a = [11, 22]

>>> b = [33, 44]

>>> c = [a, b]

>>> d = copy.copy(c)

淺拷貝模型:

①建立新的位址空間,即 id(c) != id(d)

②複製內容的引用,不複製內容的內容。即內容的id相同,為引用指向

③如果copy.copy拷貝的物件是不可變型別,則不會進行淺拷貝,僅僅執行引用指向。

原因:不可變型別的資料一定不能修改,所以id不變,引用指向即可

淺拷貝對不可變型別和可變型別的copy不同

copy.copy對於可變型別,會進行淺拷貝

copy.copy對於不可變型別,不會拷貝,僅僅是指向

淺拷貝的幾種方法:

1.copy模組的 copy.copy()

2.切片

3.字典的copy,d = dict() d.copy()

4.工廠函式,如list()

深拷貝:

建立乙個新的物件,並且遞迴的複製它所包含的物件(修改其中乙個,另外乙個不會改變)

耦合度為0

>>> import copy

>>> a = [11, 22]

>>> b = [33, 44]

>>> c = [a, b]

>>> d = copy.deepcopy(c)

深拷貝模型

①建立新的位址空間 id(d) != id(c)

②複製內容,類似linux硬鏈結

深拷貝全部指向新的空間,和拷貝物件沒有聯絡,二者是單獨存在的

注意點:

如果拷貝物件是不可變型別,則引用指向

如果拷貝物件中有可變型別,則拷貝

深拷貝 可以用於資料備份

python 引用,淺拷貝,深拷貝

引用 當物件是不可變型別的時候,int float double string tuple 純tuple 遇到 引用 問題時,雖然起初兩個變數指向同乙個記憶體位址,但是改變了其中乙個值,並不會影響另外乙個 會重新開闢記憶體位址 當物件是可變型別的時候,list dic,遇到 引用 問題,會一直共享一...

Python深拷貝 淺拷貝 引用

列表巢狀 如果想拷貝之後賦值的變數不想影響之前的列 表變數import copy 反之copy usr bin env python coding utf 8 author mxl time 2020 3 17 import copy a 1,2,3 b a a print a的初始值為 str a...

Python引用 淺拷貝 深拷貝

1 概念 深拷貝 將父和子的值都進行傳遞,無論怎麼去修改源變數,深拷貝的變數都和源變數無關 2 引用 我們建立乙個變數a,通過引用將a賦值給變數b,使用id 檢視變數位址,a與b得位址一致,可見兩者此時指向同意記憶體位址,當我們改變a得值時,b得值也會變化。引用示例 a 1 b a print id...