python坑之copy.copy和copy.deepcopy不同

2025-10-07 11:36:27

1、一般的复制就是整个复制,比如复制一个文件,就会整体拷贝,当源文件改变后,拷贝件内容不会跟着改变。

浅拷贝却不是这样。

浅拷贝 只拷贝父对象,对象的内部的子对象不会拷贝。

python的浅拷贝函数

import copy

浅拷贝copy.copy  后续可能还有关系!深拷贝copy.deepcopy  是我们一般意义上的拷贝 全拷,后续也没什关系

python坑之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("---------")

python坑之copy.copy和copy.deepcopy不同

python坑之copy.copy和copy.deepcopy不同

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("---------")

python坑之copy.copy和copy.deepcopy不同

python坑之copy.copy和copy.deepcopy不同

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("---------")

python坑之copy.copy和copy.deepcopy不同

python坑之copy.copy和copy.deepcopy不同

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)

python坑之copy.copy和copy.deepcopy不同

6、list例子:

# 浅拷贝copy.copy 只拷贝父对象,子对象还可能跟着变 不知道用处到底有多大# 深拷贝copy.deepcopy 所有都拷贝,拷贝对象及其子对象 考完就没啥关系了

图片:

似乎深浅拷贝都差不多,但是为稳妥 要考虑二者的不同

python坑之copy.copy和copy.deepcopy不同

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢