1、一般的复制就是整个复制,比如复制一个文件,就会整体拷贝,当源文件改变后,拷贝件内容不会跟着改变。浅拷贝却不是这样。浅拷贝 只拷贝父对象,对象的内部的子对象不会拷贝。python的浅拷贝函数import copy浅拷贝copy.copy 后续可能还有关系!深拷贝copy.deepcopy 是我们一般意义上的拷贝 全拷,后续也没什关系
2、import cop鲻戟缒男yimport cv2 as cvimport skimage# 列表为例# list = ['流浪地球是好电影'稆糨孝汶;, "疯狂的外星人", ['好电影', '坏电影']]list = ['流浪地球是好电影', ['好电影', '坏电影']]print('list原版本 = ', list)list_othername = list # 赋值,传对象的引用list.append("上海堡垒") # 修改对象listlist[1].append('呵呵') # 修改对象list中的['好电影', '坏电影']print('list修改后 = ', list)print('list_othername = ', list_othername)print("---------")
3、浅拷贝情况:修改list 注意copy是否跟着变,变了哪些?list = ['流浪地球是好电影', ['好电影', '坏电影']]print('list原版本 = ', list)list_copy = copy.copy(list) # 对象拷贝,浅拷贝list.append("上海堡垒") # 修改对象listlist[1].append('呵呵') # 修改对象list中的['好电影', '坏电影']print('list修改后 = ', list)print('list_copy = ', list_copy)print("---------")
4、深拷贝对比结果: 修改原文件 对深拷鹂掳粼疤贝的文件没影响!list = ['流浪地球是好电影', ['好电影', '坏电影媪青怍牙']]print('list原版本 = ', list)list_deepcopy = copy.deepcopy(list) # 对象拷贝,深拷贝list.append("上海堡垒") # 修改对象listlist[1].append('呵呵') # 修改对象list中的['好电影', '坏电影']print('list修改后 = ', list)print('list_deepcopy = ', list_deepcopy)print("---------")
5、下面再来一个图片使用浅拷鹂掳粼疤贝 深拷贝的对比 似乎差不多。image = cv.imread('c:\\meiping1.png',0)copy朐袁噙岿Img = copy.copy(image)deepcopyImg = copy.deepcopy(image)img1 = image#添加高斯噪声的有一种方法 修改了原文件img_noise = skimage.util.random_noise(image, mode='gaussian', seed=None, var=(15 / 255.0) ** 2) # add gaussian noiseimage = skimage.util.random_noise(image, mode='gaussian', seed=None, var=(15 / 255.0) ** 2) # add gaussian noisecv.imshow("img_noise", img_noise)cv.imshow("image", image)cv.imshow("img1", img1)cv.imshow("copyImg", copyImg)cv.imshow("deepcopyImg", deepcopyImg)cv.waitKey(0)
6、list例子:# 浅拷贝copy.copy 只拷贝父对象,子对象还可能跟着变 不知道用处到底有多大# 深拷贝copy.deepcopy 所有都拷贝,拷贝对象及其子对象 考完就没啥关系了图片:似乎深浅拷贝都差不多,但是为稳妥 要考虑二者的不同