深拷贝和浅拷贝
🚩浅拷贝是视图,而深拷贝是副本。
浅拷贝
import numpy as np
from PIL import Image
im = Image.open('jk.jpg')
im_pillow = np.asarray(im) # 浅拷贝
im_pillow[:,:,1:] = 0
报错的地方显示im_pillow
只读。原因在于asarray
属于浅拷贝,浅拷贝也称为视图,指的是与原数组共享数据的数组,请注意,只是数据,没有说共享形状
。常见的浅拷贝也有切片操作。下面是一个浅拷贝的例子:
总结:
- 浅拷贝是共享数据,但是形状可能不同,修改
b
之后,a
也会跟着改变
深拷贝
深拷贝也叫副本,就是完全复制一份原来的数据,完全脱离原来的数据,修改新的副本则不影响原来的数据,通常使用copy()
方法。
import numpy as np
from PIL import Image
im = Image.open('jk.jpg')
im_pillow = np.array(im) # 深拷贝
im_pillow[:,:,1:] = 0
则不会报错。