1. 程式人生 > 實用技巧 >python直接賦值、淺拷貝和深度拷貝

python直接賦值、淺拷貝和深度拷貝

  • 直接賦值:其實就是物件的引用(別名)。

  • 淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件。

  • 深拷貝(deepcopy):copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。

一、字典淺拷貝

a = {1:[1,2,3]}
b = a.copy()

print("a:",a)   # 輸出:a: {1: [1, 2, 3]}
print("b:",b)   # 輸出:b: {1: [1, 2, 3]}

a[1].append(4)
print("a:",a)   # 輸出:a: {1: [1, 2, 3,4]}
print("b:",b)   #
輸出:b: {1: [1, 2, 3,4]}

二、深度拷貝

深度拷貝需要引入copy模組

import copy
a = {1:[1,2,3]}
c = copy.deepcopy(a)

print("a:",a)   # 輸出:a: {1: [1, 2, 3]}
print("c:",c)   # 輸出:b: {1: [1, 2, 3]}

a[1].append(5)
print("a:",a)   # 輸出:a: {1: [1, 2, 3,5]}
print("c:",c)   # 輸出:b: {1: [1, 2, 3]}

三、說明

1、b = a :賦值引用,a 和 b 都指向一個值;

2、b = a.copy() : 淺拷貝,a 和 b 是一個獨立的物件,但他們的子物件還是指向同意物件(是引用)。

3、b = copy.deepcopy(a) : 深度拷貝,a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的