Python的複製、淺拷貝、深拷貝
在python中,對象複製實際上是對象的引用。當創建一個對象,然後把它賦給另一個變量的時候,Python並沒有拷貝這個對象,而只是拷貝了這個對象的引用。
賦值
a = [1,2,3,4,5]
b = a
print(a, b)
>>>[1,2,3,4,5]
>>>[1,2,3,4,5]
#改變a,b也跟着改變
a.append(5)
print(a, b)
>>>[1,2,3,4,5,5]
>>>[1,2,3,4,5,5]
#改變b,a也跟着改變
b.append(6)
print(a, b)
>>>[1,2,3,4,5,5,6]
>>>[1,2,3,4,5,5,6]
淺拷貝
淺拷貝對原對象進行修改後,拷貝後的對象不發生改變,但淺拷貝的子對象進行修改的話,拷貝後的對象會跟着發生改變。總結來講,淺拷貝之拷貝對象內容,不拷貝子對象
import copy
a = [1,2,3,4,5]
b = copy.copy(a)
print(a, b)
>>> [1,2,3,4,5] [1,2,3,4,5]
a.append(6)
print(a, b)
>>>[1,2,3,4,5,6] [1,2,3,4,5] #b不改變
#但當a存在子對象的時候
a = [1,2,3,[1]]
b = a
a[3].append(2)
print(a, b)
>>> a = [1,2,3,[1,2]]
>>> b = [1,2,3,[1,2]]
深拷貝
深拷貝就是拷貝對象及其子對象
import copy
a = [1,2,3,[1]]
b = copy.deepcopy(a)
a.append(5)
a[3].append(5)
print(a, b)
>>>[1,2,3,[1,5]] [1,2,3,[1]]