PAT乙級1058 選擇題(用字串處理時你可能遇到的採坑點!)
阿新 • • 發佈:2021-02-09
深淺拷貝
python中,物件賦值實際上是物件的引用。
當建立一個物件,然後把它賦給另一個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用
一般有幾種情形(前三種針對可變資料型別):
- 直接賦值,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變
a=[ 1 , 2 , 3 , [ 'a','b']]
b = a
a.append(5)#共同變化
- copy淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變
c = a.copy()
a.append(5)#c不變
a[3].append('c')#c[3]跟著變化
- 深拷貝,包含物件裡面的自物件的拷貝,所以原始物件的改變不會造成深拷貝里任何子元素的改變
import copy
d = copy.deepcopy(a)
a.append(5)#d不變
a[3].append('c')#d[3]不變
- 深拷貝,可強制拷貝不可變容器元組
import copy
t1 = (1,)
t2 = copy.deepcopy(t1)