python的引用 淺拷貝與深拷貝

2021-07-24 20:26:29 字數 643 閱讀 8386

引用:

a=['a',['n','100']]

b=ac=b

b[0]='b'(此時a[0]='b',c[0]='b')

淺拷貝:完全切片[:]、list、dict等

a=['a',['n','100']]

b=list(a)

c=list(b)

b[0]='b';c[0]='c';b[1][1]='30'(此時a[1][1]='30',c[1][1]='30')為什麼b[0]!=a[0]!=c[0]因為它是字串(不可變的,拷貝時建立乙個新的物件),而b[1]是個列表(可變的,拷貝時將它的引用複製了一下,所以改變裡面的元素b[1][0]、b[1][1]會改變共同引用a元素c的c[1][0]、c[1][1]、a[1][0]、a[1][1])

深拷貝:copy.deepcopy()

a=['a',['n','100']]

b=copy.deepcopy(a)

c=copy.deepcopy(a)

此時a,b,c互不影響

原來python處理資料時預設採用的方式是引用,類似於c++裡面的int b;int &a=b(a只是b的乙個別名)

對於數字、字串、元組等原子型別就不存在什麼淺拷貝、深拷貝了(因為它是新建了乙個物件,其id會改變的)

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...