對象引用與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 深拷貝 拷貝對象的值及其子對象的值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章