1. 程式人生 > 其它 >PAT乙級1058 選擇題(用字串處理時你可能遇到的採坑點!)

PAT乙級1058 選擇題(用字串處理時你可能遇到的採坑點!)

技術標籤:pythonpython

深淺拷貝

python中,物件賦值實際上是物件的引用。

當建立一個物件,然後把它賦給另一個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用

一般有幾種情形(前三種針對可變資料型別):

  1. 直接賦值,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變
a=[ 1 , 2 , 3 , [ 'a','b']]
b = a
a.append(5)#共同變化
  1. copy淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變
c = a.copy()
a.append(5)#c不變
a[3].append('c')#c[3]跟著變化
  1. 深拷貝,包含物件裡面的自物件的拷貝,所以原始物件的改變不會造成深拷貝里任何子元素的改變
import copy
d = copy.deepcopy(a)
a.append(5)#d不變
a[3].append('c')#d[3]不變
  1. 深拷貝,可強制拷貝不可變容器元組
import copy
t1 = (1,)
t2 = copy.deepcopy(t1)