Python的賦值、淺拷貝和深拷貝
阿新 • • 發佈:2021-12-23
示例程式碼:
# 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也不會改變