資料淺/深拷貝

Jinku Hu 2024年2月15日
  1. 淺拷貝
  2. 深拷貝
資料淺/深拷貝

資料拷貝有兩種,淺拷貝(shallow copy)以及深拷貝(deep copy)。從名字上可以看出來,淺拷貝,僅拷貝指向物件的指標;而深拷貝,是將整個物件拷貝到另外一塊記憶體中。

淺拷貝

比如,我們有一個列表 [1, [1,2,3]],淺拷貝的話,列表中的第二個元素-列表 [1,2,3] 假如發生變化的話,它會同時在原始列表,以及淺拷貝後的列表做相同的改變,因為它們指向的是同一個記憶體地址。

A = [1, [1, 2, 3]]
B = A.copy()
A[1].append(4)
print(B)
# Out: [1, [1,2,3,4]]
print(A)
# Out: [1, [1,2,3,4]]
A[1] is B[1]
# Out: True

Python 淺拷貝示例

淺拷貝有兩種實現方式,一個是用 copy() 方法,另外一個可以用 copy 模組裡面的 copy 函式。
列表型別還有一種淺拷貝方法,就是通過切片來生成的新列表,也是淺拷貝的結果。

A = [1, [1, 2, 3]]
B = A[:]
B[1] is A[1]
# Out: True

深拷貝

深拷貝是完全的將被拷貝物件資料拷貝到新的記憶體中,新舊兩個資料物件地址完全不同,它們是 100%獨立的資料。

import copy

A = [1, [1, 2, 3]]
B = copy.deepcopy(A)
A is B
# Out: False
A[1].append(4)
print(A, B)
# Out: [1, [1, 2, 3, 4]] [1, [1, 2, 3]]
A[1] is B[1]

Python 深拷貝示例

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook