python、numpy、pytorch中的浅拷贝和深拷贝

1、Python中的浅拷贝和深拷贝

import copya = [1, 2, 3, 4, [11, 22, 33, [111, 222]]]
b = a
c = a.copy()
d = copy.deepcopy(a)print('before modify\r\n a=\r\n', a, '\r\n','b = a=\r\n', b, '\r\n','c = a.copy()=\r\n', c, '\r\n','d = copy.deepcopy(a)\r\n', d, '\r\n')
 before modify
 a=
 [1, 2, 3, 4, [11, 22, 33, [111, 222]]] 
 b = a=
 [1, 2, 3, 4, [11, 22, 33, [111, 222]]] 
 c = a.copy()=
 [1, 2, 3, 4, [11, 22, 33, [111, 222]]] 
 d = copy.deepcopy(a)
 [1, 2, 3, 4, [11, 22, 33, [111, 222]]] 

注:图片网址Python Tutor code visualizer: Visualize code in Python, JavaScript, C, C++, and Java

a[0] = 10
print('after a[0] = 10\r\n a=\r\n', a, '\r\n','b = a=\r\n', b, '\r\n','c = a.copy()=\r\n', c, '\r\n','d = copy.deepcopy(a)\r\n', d, '\r\n')
 after a[0] = 10
 a=
 [10, 2, 3, 4, [11, 22, 33, [111, 222]]] 
 b = a=
 [10, 2, 3, 4, [11, 22, 33, [111, 222]]] 
 c = a.copy()=
 [1, 2, 3, 4, [11, 22, 33, [111, 222]]] 
 d = copy.deepcopy(a)
 [1, 2, 3, 4, [11, 22, 33, [111, 222]]] 
a[4][0] = 100
print('after a[4][0] = 100\r\n a=\r\n', a, '\r\n','b = a=\r\n', b, '\r\n','c = a.copy()=\r\n', c, '\r\n','d = copy.deepcopy(a)\r\n', d, '\r\n')
after a[4][0] = 100
 a=
 [10, 2, 3, 4, [100, 22, 33, [111, 222]]] 
 b = a=
 [10, 2, 3, 4, [100, 22, 33, [111, 222]]] 
 c = a.copy()=
 [1, 2, 3, 4, [100, 22, 33, [111, 222]]] 
 d = copy.deepcopy(a)
 [1, 2, 3, 4, [11, 22, 33, [111, 222]]] 
a[4][3][0] = 1000
print('after a[4][3][0] = 1000\r\n a=\r\n', a, '\r\n','b = a=\r\n', b, '\r\n','c = a.copy()=\r\n', c, '\r\n','d = copy.deepcopy(a)\r\n', d, '\r\n')
after a[4][3][0] = 1000
 a=
 [10, 2, 3, 4, [100, 22, 33, [1000, 222]]] 
 b = a=
 [10, 2, 3, 4, [100, 22, 33, [1000, 222]]] 
 c = a.copy()=
 [1, 2, 3, 4, [100, 22, 33, [1000, 222]]] 
 d = copy.deepcopy(a)
 [1, 2, 3, 4, [11, 22, 33, [111, 222]]] 

2、numpy中的浅拷贝和深拷贝

a1 = np.random.randn(2, 3)
b1 = a1
c1 = a1.copy()
d1 = copy.deepcopy(a1)print('before modify\r\n a1=\r\n', a1, '\r\n','b1 = a1=\r\n', b1, '\r\n','c1 = a1.copy()=\r\n', c1, '\r\n','d1 = copy.deepcopy(a1)=\r\n', d1, '\r\n')a1[0] = 10
print('after a1[0] = 10\r\n a1=\r\n', a1, '\r\n','b1 = a1=\r\n', b1, '\r\n','c1 = a1.copy()=\r\n', c1, '\r\n','d1 = copy.deepcopy(a1)=\r\n', d1, '\r\n')

before modify
 a1=
 [[ 1.48618757 -0.90409826  2.05529475]
 [ 0.14232255  2.93331428  0.88511785]] 
 b1 = a1=
 [[ 1.48618757 -0.90409826  2.05529475]
 [ 0.14232255  2.93331428  0.88511785]] 
 c1 = a1.copy()=
 [[ 1.48618757 -0.90409826  2.05529475]
 [ 0.14232255  2.93331428  0.88511785]] 
 d1 = copy.deepcopy(a1)=
 [[ 1.48618757 -0.90409826  2.05529475]
 [ 0.14232255  2.93331428  0.88511785]] 
after a1[0] = 10
 a1=
 [[10.         10.         10.        ]
 [ 0.14232255  2.93331428  0.88511785]] 
 b1 = a1=
 [[10.         10.         10.        ]
 [ 0.14232255  2.93331428  0.88511785]] 
 c1 = a1.copy()=
 [[ 1.48618757 -0.90409826  2.05529475]
 [ 0.14232255  2.93331428  0.88511785]] 
 d1 = copy.deepcopy(a1)=
 [[ 1.48618757 -0.90409826  2.05529475]
 [ 0.14232255  2.93331428  0.88511785]] 

  3、pytorch中的浅拷贝和深拷贝

a2 = torch.randn(2, 3)
b2 = torch.Tensor(a2)
bb2 = torch.tensor(a2)
c2 = a2.detach()
cc2 = a2.clone()
ccc2 = a2.clone().detach()
print('before modify\r\n a2=\r\n', a2, '\r\n','b2 = torch.Tensor(a2)=\r\n', b2, '\r\n','bb2 = torch.tensor(a2)=\r\n', bb2, '\r\n','c2 = a2.detach()=\r\n', c2, '\r\n','cc2 = a2.clone()=\r\n', cc2, '\r\n','ccc2 = a2.clone().detach()=\r\n', ccc2)
a2[0] = 0
print('after modify\r\n a2=\r\n', a2, '\r\n','b2 = torch.Tensor(a2)=\r\n', b2, '\r\n','bb2 = torch.tensor(a2)=\r\n', bb2, '\r\n','c2 = a2.detach()=\r\n', c2, '\r\n','cc2 = a2.clone()=\r\n', cc2, '\r\n','ccc2 = a2.clone().detach()=\r\n', ccc2)

before modify
 a2=
 tensor([[-0.6472,  1.3437, -0.3386],
        [ 0.8979, -0.4158,  1.1338]]) 
 b2 = torch.Tensor(a2)=
 tensor([[-0.6472,  1.3437, -0.3386],
        [ 0.8979, -0.4158,  1.1338]]) 
 bb2 = torch.tensor(a2)=
 tensor([[-0.6472,  1.3437, -0.3386],
        [ 0.8979, -0.4158,  1.1338]]) 
 c2 = a2.detach()=
 tensor([[-0.6472,  1.3437, -0.3386],
        [ 0.8979, -0.4158,  1.1338]]) 
 cc2 = a2.clone()=
 tensor([[-0.6472,  1.3437, -0.3386],
        [ 0.8979, -0.4158,  1.1338]]) 
 ccc2 = a2.clone().detach()=
 tensor([[-0.6472,  1.3437, -0.3386],
        [ 0.8979, -0.4158,  1.1338]])
after modify
 a2=
 tensor([[ 0.0000,  0.0000,  0.0000],
        [ 0.8979, -0.4158,  1.1338]]) 
 b2 = torch.Tensor(a2)=
 tensor([[ 0.0000,  0.0000,  0.0000],
        [ 0.8979, -0.4158,  1.1338]]) 
 bb2 = torch.tensor(a2)=
 tensor([[-0.6472,  1.3437, -0.3386],
        [ 0.8979, -0.4158,  1.1338]]) 
 c2 = a2.detach()=
 tensor([[ 0.0000,  0.0000,  0.0000],
        [ 0.8979, -0.4158,  1.1338]]) 
 cc2 = a2.clone()=
 tensor([[-0.6472,  1.3437, -0.3386],
        [ 0.8979, -0.4158,  1.1338]]) 
 ccc2 = a2.clone().detach()=
 tensor([[-0.6472,  1.3437, -0.3386],
        [ 0.8979, -0.4158,  1.1338]])

 参考

1、B站视频

十分钟!彻底弄懂Python深拷贝与浅拷贝机制_哔哩哔哩_bilibili

11、简书

NumPy之浅拷贝和深拷贝 - 简书 (jianshu.com)

2、CSDN-numpy

 numpy copy(无拷贝 浅拷贝、深拷贝)类型说明_genghaihua的博客-CSDN博客

3、CSDN-pytorch

python、pytorch中的常见的浅拷贝、深拷贝问题总结_pytorch tensor的浅、复制_新嬉皮士的博客-CSDN博客

完整代码

import numpy as np
import copy
import torcha = [1, 2, 3, 4, [11, 22, 33, [111, 222]]]
b = a
c = a.copy()
d = copy.deepcopy(a)print('before modify\r\n a=\r\n', a, '\r\n','b = a=\r\n', b, '\r\n','c = a.copy()=\r\n', c, '\r\n','d = copy.deepcopy(a)\r\n', d, '\r\n')a[0] = 10
print('after a[0] = 10\r\n a=\r\n', a, '\r\n','b = a=\r\n', b, '\r\n','c = a.copy()=\r\n', c, '\r\n','d = copy.deepcopy(a)\r\n', d, '\r\n')a[4][0] = 100
print('after a[4][0] = 100\r\n a=\r\n', a, '\r\n','b = a=\r\n', b, '\r\n','c = a.copy()=\r\n', c, '\r\n','d = copy.deepcopy(a)\r\n', d, '\r\n')a[4][3][0] = 1000
print('after a[4][3][0] = 1000\r\n a=\r\n', a, '\r\n','b = a=\r\n', b, '\r\n','c = a.copy()=\r\n', c, '\r\n','d = copy.deepcopy(a)\r\n', d, '\r\n')a1 = np.random.randn(2, 3)
b1 = a1
c1 = a1.copy()
d1 = copy.deepcopy(a1)print('before modify\r\n a1=\r\n', a1, '\r\n','b1 = a1=\r\n', b1, '\r\n','c1 = a1.copy()=\r\n', c1, '\r\n','d1 = copy.deepcopy(a1)=\r\n', d1, '\r\n')a1[0] = 10
print('after a1[0] = 10\r\n a1=\r\n', a1, '\r\n','b1 = a1=\r\n', b1, '\r\n','c1 = a1.copy()=\r\n', c1, '\r\n','d1 = copy.deepcopy(a1)=\r\n', d1, '\r\n')a2 = torch.randn(2, 3)
b2 = torch.Tensor(a2)
bb2 = torch.tensor(a2)
c2 = a2.detach()
cc2 = a2.clone()
ccc2 = a2.clone().detach()
print('before modify\r\n a2=\r\n', a2, '\r\n','b2 = torch.Tensor(a2)=\r\n', b2, '\r\n','bb2 = torch.tensor(a2)=\r\n', bb2, '\r\n','c2 = a2.detach()=\r\n', c2, '\r\n','cc2 = a2.clone()=\r\n', cc2, '\r\n','ccc2 = a2.clone().detach()=\r\n', ccc2)
a2[0] = 0
print('after a2[0] = 0\r\n a2=\r\n', a2, '\r\n','b2 = torch.Tensor(a2)=\r\n', b2, '\r\n','bb2 = torch.tensor(a2)=\r\n', bb2, '\r\n','c2 = a2.detach()=\r\n', c2, '\r\n','cc2 = a2.clone()=\r\n', cc2, '\r\n','ccc2 = a2.clone().detach()=\r\n', ccc2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/44617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言基础】宏定义的用法详解

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

angular中如何定义一个全局组件?

需求,我们需要新建一个navBreadcrumb的全局组件。这是一个面包屑导航,在不同的页面引入时传入一个路由数组即可。 第一步:我们新建这个组件: ng g c navBreadcrumb ng g m navBreadcrumb----------nav-breadcrumb.module-------…

vue中 .env .env.development .env.production 详细说明

1.配置文件有: .env 全局默认配置文件,不论什么环境都会加载合并 .env.development 开发环境下的配置文件 .env.production 生产环境下的配置文件 2.命名规则: 属性名必须以VUE_APP_开头,比如VUE_APP_XXX 3.关于文件的加载&#x…

【BASH】回顾与知识点梳理(三十一)

【BASH】回顾与知识点梳理 三十一 三十一. 进程的管理31.1 给进程发送讯号kill -signal PIDlinux系统后台常驻进程killall -signal 指令名称 31.2 关于进程的执行顺序Priority 与 Nice 值nice :新执行的指令即给予新的 nice 值renice :已存在进程的 nice…

uniapp的uview-plus组件库的导入

uniapp的vue3中使用uview-plus组件库。在插件市场中找到该组件并点击如下所示绿色按钮,弹出弹窗选择要导入的项目后,就会在uni_modules文件中生成如下文件内容 关于插件的下载区别,可参考:https://uniapp.dcloud.net.cn/compone…

信号

信号也是IPC中的一种,是和管道,消息队列,共享内存并列的概念。 本文参考: Linux中的信号_linux中信号_wolf鬼刀的博客-CSDN博客 Linux系统编程(信号处理 sigacation函数和sigqueue函数 )_花落已飘的博客-CSDN博客 Linu…

常用curl参数及样例讲解

1 缘起 后端/后台项目开发过程中,有两个阶段的接口测试和验证,自测阶段,通过Postman构建请求, 自建一些参数,测试功能以及边界条件,这些都是可以自行掌控的,当完成功能验证与前端对接时&#x…

19万字智慧城市总体规划与设计方案WORD

导读:原文《19万字智慧城市总体规划与设计方案WORD》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 感知基础设施 感知基础设施架构由感知范围、感知手…

正演的数值模拟(零基础,学习中)

摘要: 本贴从零开始学习正演的数值模拟方法. 1. 偏微分基础 引例: 物体从一维坐标的原点开始移动, 在 t t t 时刻, 它在坐标轴的位置由函数 s ( t ) s(t) s(t) 确定, 则速度为位置变化量与时间的比值: v ( t ) d s ( t ) d t lim ⁡ Δ t → 0 s ( t Δ t ) − s ( t )…

19-普通组件的注册使用

普通组件的注册使用-局部注册 一. 组件注册的两种方式:1.局部注册:只能在注册的组件内使用 (1) 创建 vue 文件(单文件组件) (2) 在使用的组件内导入,并注册 components:{ 组件名: 组件对象 } // 导入需要注册的组件 import 组件对象 from.vue文件路径 import HmHeader from ./…

使用 HTML、CSS 和 JavaScript 创建实时 Web 编辑器

使用 HTML、CSS 和 JavaScript 创建实时 Web 编辑器 在本文中,我们将创建一个实时网页编辑器。这是一个 Web 应用程序,允许我们在网页上编写 HTML、CSS 和 JavaScript 代码并实时查看结果。这是学习 Web 开发和测试代码片段的绝佳工具。我们将使用ifram…

如何找到一个数的所有质因数,以及如何快速判断一个数是不是质数

前情介绍 今天遇到一个需求&#xff1a;找到一个数所有的质因数。 初步解决 先定义一个判断质数的函数&#xff1a; def is_Prime(number):i 2count 0while i < number:if number % i 0 :count 1i 1if count > 0:return Falseelse:return True 接着定义一个寻找质…

【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署

目录 EFK安装部署 一、环境准备&#xff08;所有主机&#xff09; 1、主机初始化配置 2、配置主机名并绑定hosts&#xff0c;不同主机名称不同 3、主机配置初始化 4、部署docker环境 二、部署kubernetes集群 1、组件介绍 2、配置阿里云yum源 3、安装kubelet kubeadm …

模型数据处理-数据放入 session和@ModelAttribute 实现 prepare 方法详细讲解

&#x1f600;前言 本文详细讲解了模型数据处理-数据放入 session和ModelAttribute 实现 prepare 方法详细讲解 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c…

企业数字化转型大数据湖一体化平台项目建设方案PPT

导读&#xff1a;原文《企业数字化转型大数据湖一体化平台项目建设方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 喜欢文章&#xff0c;您可以点赞评论转发…

知识体系总结(九)设计原则、设计模式、分布式、高性能、高可用

文章目录 架构设计为什么要进行技术框架的设计 六大设计原则一、单一职责原则二、开闭原则三、依赖倒置原则四、接口分离原则五、迪米特法则&#xff08;又称最小知道原则&#xff09;六、里氏替换原则案例诠释 常见设计模式构造型单例模式工厂模式简单工厂工厂方法 生成器模式…

设计模式篇---抽象工厂(包含优化)

文章目录 概念结构实例优化 概念 抽象工厂&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定它们具体的类。 工厂方法是有一个类型的产品&#xff0c;也就是只有一个产品的抽象类或接口&#xff0c;而抽象工厂相对于工厂方法来说&#xff0c;是有…

Android Studio实现解析HTML获取图片URL,将URL存到list,进行列表展示

目录 效果build.gradle(app)添加的依赖(用不上的可以不加)AndroidManifest.xml错误代码activity_main.xmlitem_image.xmlMainActivityImage适配器ImageModel 接收图片URL效果 build.gradle(app)添加的依赖(用不上的可以不加) dependencies {implementation com.square…

Python可视化在量化交易中的应用(11)_Seaborn折线图

举个栗子&#xff0c;用seaborn绘制折线图。 Seaborn中折线图的绘制方法 在seaborn中&#xff0c;我们一般使用sns作为seaborn模块的别名&#xff0c;因此&#xff0c;在下文中&#xff0c;均以sns指代seaborn模块。 seaborn中绘制折线图使用的是sns.lineplot()函数&#xff…

中国剩余定理及扩展

目录 中国剩余定理解释 中国剩余定理扩展——求解模数不互质情况下的线性方程组&#xff1a; 代码实现&#xff1a; 互质&#xff1a; 非互质&#xff1a; 中国剩余定理解释 在《孙子算经》中有这样一个问题&#xff1a;“今有物不知其数&#xff0c;三三数之剩二&#x…