python坑之copy.copy和copy.deepcopy不同
1、一般的复制就是整个复制,比如复制一个文件,就会整体拷贝,当源文件改变后,拷贝件内容不会跟着改变。
浅拷贝却不是这样。
浅拷贝 只拷贝父对象,对象的内部的子对象不会拷贝。
python的浅拷贝函数
import copy
浅拷贝copy.copy 后续可能还有关系!深拷贝copy.deepcopy 是我们一般意义上的拷贝 全拷,后续也没什关系

2、import copyimport 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("上海堡垒") # 修改对象list
list[1].append('呵呵') # 修改对象list中的['好电影', '坏电影']
print('list修改后 = ', list)
print('list_copy = ', list_copy)
print("---------")


4、深拷贝对比结果: 修改原文件 对深拷贝的文件没影响!
list = ['流浪地球是好电影', ['好电影', '坏电影']]
print('list原版本 = ', list)
list_deepcopy = copy.deepcopy(list) # 对象拷贝,深拷贝
list.append("上海堡垒") # 修改对象list
list[1].append('呵呵') # 修改对象list中的['好电影', '坏电影']
print('list修改后 = ', list)
print('list_deepcopy = ', list_deepcopy)
print("---------")


5、下面再来一个图片使用
浅拷贝 深拷贝的对比 似乎差不多。
image = cv.imread('c:\\meiping1.png',0)
copyImg = 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 noise
image = skimage.util.random_noise(image, mode='gaussian', seed=None, var=(15 / 255.0) ** 2) # add gaussian noise
cv.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 所有都拷贝,拷贝对象及其子对象 考完就没啥关系了
图片:
似乎深浅拷贝都差不多,但是为稳妥 要考虑二者的不同
