1. 程式人生 > >物件引用與copy,deepcopy之間的區別

物件引用與copy,deepcopy之間的區別

import numpy as np
賦值(物件引用)
a = np.array([1, 2, 3, 4])
a
array([1, 2, 3, 4])
b = a
b
array([1, 2, 3, 4])
a[2] = 0
a
array([1, 2, 0, 4])
b
array([1, 2, 0, 4])
b[1] = 0
a
array([1, 0, 0, 4])
c = b[1:3]
c
array([0, 0])
c[1] = 2
c
array([0, 2])
a
array([1, 0, 2, 4])
b
array([1, 0, 2, 4])
copy(物件拷貝,淺拷貝)
a = np.array([1, 2, 3, 4])
b = a.copy()
b
array([1, 2, 3, 4])
b[0] = 0
b
array([0, 2, 3, 4])
a
array([1, 2, 3, 4])
deepcopy(物件拷貝,深拷貝)
a = [1, 2, 3, 4, ['a', 'b']] #原始物件
d = copy.deepcopy(a) #物件拷貝,深拷貝
d
[1, 2, 3, 4, ['a', 'b']]

複製之間的區別

import
copy a = [1, 2, 3, 4, ['a', 'b']] #原始物件 b = a #賦值,傳物件的引用 c = copy.copy(a) #物件拷貝,淺拷貝 d = copy.deepcopy(a) #物件拷貝,深拷貝 a.append(5) #修改物件a a[4].append('c') #修改物件a中的['a', 'b']陣列物件 print('\t\t:a = ', a) print('物件引用\t:b = ', b) print('copy\t\t:c = ', c) print('deepcopy\t:d = ', d)
        :a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
物件引用    :b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
copy        :c =  [1, 2, 3, 4, ['a', 'b', 'c']]
deepcopy    :d =  [1, 2, 3, 4, ['a', 'b']]
  • 物件引用只是引用了之前物件愛的索引,當原物件與賦值後的物件發生改變時,另一個物件也會發生改變
  • copy 只拷貝父物件,不會拷貝物件的內部的子物件。也就是隻拷貝一維中的內容,如果一維中是列表,則是引用列表的物件而不是值
  • deepcopy 深拷貝 拷貝物件的值及其子物件的值

相關推薦

no