引用 淺拷貝 深拷貝之間的不同以及實現方式

2021-10-09 07:15:59 字數 1230 閱讀 9696

list1 = [11,12,13]

list2 = list1

print(list1 == list2) #==表示數值是否相同

print(list1 is list2) #is表示位址是否相同

print(『修改list1』)

list1[0] = 0

print(「展示修改之後的list2」,list2)

##淺拷貝

##淺拷貝中位址不同,數值相同

list2 = list1.copy()

print(list1==list2) #數值依舊相同

print(list1 is list2) #位址不同了

print(id(list1)) #id 用來檢視位址

print(id(list2))

##深拷貝,需要導包copy。deepcopy

from copy import deepcopy

list2 = deepcopy(list1)

print(list1==list2) #數值依舊相同

print(list1 is list2) #位址不同了

print(id(list1)) #id 用來檢視位址

print(id(list2))

#當需要拷貝的東西只有一層的時候深拷貝與淺拷貝性質相同

#當需要拷貝的檔案中巢狀了別的檔案,深拷貝不受影響。淺拷貝受影響

#比如列表巢狀列表

list1 = [[11,22,33],12,13]

list2 = list1.copy()

list1[0][0] = 0

print(『修改之後的list1』,list1)

print(『修改之後的list2』,list2)

『』』修改之後的list1 [[0, 22, 33], 12, 13] #其中的12,13兩個數為小整數池

修改之後的list2 [[0, 22, 33], 12, 13]

list2 = deepcopy(list1)

list1[0][0] = 0

print(『修改之後的list1』,list1)

print(『修改之後的list2』,list2)

『』』修改之後的list1 [[0, 22, 33], 12, 13]

修改之後的list2 [[11, 22, 33], 12, 13]

『』』##深拷貝中將內嵌的列表也拷貝了乙個位址。所以不受影響

#深拷貝也叫遞迴拷貝

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