1. 程式人生 > 其它 >Python的賦值、淺拷貝和深拷貝

Python的賦值、淺拷貝和深拷貝

示例程式碼:

# This Python file uses the following encoding: utf-8
"""
直接賦值:其實就是物件的引用(別名)。
淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件。
深拷貝(deepcopy): copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。
"""
import copy
a = [1, 2, 3, 4, ['a', 'b']]  # 原始物件

b = a  # 賦值引用,a 和 b 都指向同一個物件。【要改變都改變】
c = copy.copy(a)  # 淺拷貝, a 和 b 是一個獨立的物件,但他們的子物件還是指向統一物件(是引用)。【子物件改變就都改變】
d = copy.deepcopy(a) # 深度拷貝, a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的。【兩者沒任何關係】 a.append(5) # 修改物件a a[4].append('c') # 修改物件a中的['a', 'b']陣列物件 print('a = ', a) print('b = ', b) print('c = ', c) print('d = ', d)

輸出結果:

a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5] # 輸出陣列a
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5] # 因為b與a指向同一物件,b的值就是a的值
c 
= [1, 2, 3, 4, ['a', 'b', 'c']] # c為a的淺拷貝,a中的子物件修改了,所以c的子物件也修改了,其他無改變 d = [1, 2, 3, 4, ['a', 'b']] # d與a沒關係,a改變d也不會改變