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