Python对象的浅拷贝与深拷贝

后向投影算法(BPA)-SAR成像算法系列(二) SAR成像算法:后向投影算法(BPA)原理介绍及实现步骤解析。 阅读详情

在讲我们深浅拷贝之前,我们需要先区分一下拷贝和赋值的概念。看下面的例子

a = [1,2,3]

赋值:

b = a

拷贝:

b = a.copy()

上面的两行代码究竟有什么不同呢?带着这个问题,继续

看了上面这张图,相信大家已经对直接赋值和拷贝有了一个比较清楚的认识。

直接赋值:复制一个对象的引用给新变量

拷贝:复制一个对象到新的内存地址空间,并且将新变量引用到复制后的对象

我们的深浅拷贝只是对于可变对象来讨论的。 不熟悉的朋友需要自己去了解可变对象与不可变对象哦。

1. 对象的嵌套引用

a = { "list": [1,2,3] }

上面的代码,在内存中是什么样子的呢?请看下图:

原来,在我们的嵌套对象中,子对象也是一个引用。

1. 浅拷贝

如上图所示,我们就可以很好的理解什么叫做浅拷贝了。

浅拷贝:只拷贝父对象,不会拷贝对象的内部的子对象。内部的子对象指向的还是同一个引用

上面 的 a 和 c 是一个独立的对象,但他们的子对象还是指向统一对象

1.1 浅拷贝的方法

  • .copy()

    a = {"list": [1,2,3] }
    b = a.copy()
  • copy模块

    import copy
    a = {"list": [1,2,3] }
    b = copy.copy(a)
  • 列表切片[:]

    a = [1,2,3,[1,2,3]]
    b = a[1:]
  • for循环

    a = [1,2,3,[1,2,3]]
    b = []
    for i in a:
      b.append(i)

1.2 浅拷贝的影响

a = {"list":[1,2,3]}
b = a.copy()
a["list"].append(4)

print(a)
# {'list': [1, 2, 3, 4]}

print(b)
# {'list': [1, 2, 3, 4]}

在上面的例子中,我们明明只改变 a 的子对象,却发现 b 的子对象也跟着改变了。这样在我们的程序中也许会引发很多的BUG。

2. 深拷贝

上面我们知道了什么是浅拷贝,那我们的深拷贝就更好理解了。

深拷贝:完全拷贝了父对象及其子对象,两者已经完成没有任何关联,是完全独立的。

import copy
a = {"list":[1,2,3]}
b = copy.deepcopy(a)
a["list"].append(4)

print(a)
# {'list': [1, 2, 3, 4]}

print(b)
# {'list': [1, 2, 3,]}

上面的例子中,我们再次修改 a 的子对象对 b 已经没有任何影响

3. 手动实现一个深拷贝

主要采用递归的方法解决问题。判断拷贝的每一项子对象是否为引用对象。如果是就采用递归的方式将子对象进行复制。

def deepcopy(instance):
    if isinstance(instance, dict):
        return {k:deepcopy(v) for k,v in instance.items() }

    elif isinstance(instance, list):
        return [deepcopy(x) for x in instance]

    else:
        return instance

a = {"list": [1,2,3]}
b = deepcopy(a)

print(a)
# {'list': [1, 2, 3]}

print(b)
# {'list': [1, 2, 3]}

a["list"].append(4)
print(a)
# {'list': [1, 2, 3, 4]}

print(b)
# {'list': [1, 2, 3]}
将机器人urdf模型转换为Mujoco环境下的mjcf模型 在使用gym环境进行人形模型站立训练的过程中,我想要将之前ros环境下的机器人urdf模型导入到mujoco环境下,这时候就需要将urdf模型转换为mujoco专用的mjcf模型。-AzureLoong.urdf是机器人模型(我这里使用青龙的模型);--custom_robot.xml是转换完成之后的机器人模型的名字和格式;包要求 Python 版本必须是 3.11 或更高),保证自己的其他训练环境和依赖不被干扰。首先将meshes文件迁移到需要输出的目录下,然后再运行转换命令。最后就可以成功输出了。 阅读详情

相关推荐

《双剑合璧:双 IMU 驱动的高精度 AHRS 实战宝典(基于 ROS2)》

本文系统阐述了基于双IMU的高精度姿态与航向参考系统(AHRS)设计与实现方法。文章首先分析了传统单IMU系统的局限性,提出通过双IMU冗余配置实现性能互补的方案。从硬件设计要点(包括IMU选型策略、电路降噪方法、PCB布局规范),到算法实现方案(互补滤波、卡尔曼滤波等融合算法),再到ROS2软件架构与调优策略,全方位展示了双IMU系统的技术实现路径。特别强调快速性与高精度平衡的方法,包括动态参数调整、双IMU权重优化等核心技巧。最后总结了硬件降噪、算法调优等实用心法。

bother3000的博客 2024

python学习之【浅拷贝】

python学习记录——浅拷贝

沃和莱特的博客 1354

n8n 快速入门1:构建一个简单的工作流

n8n 快速入门指南

engchina的专栏 1万+

Python的浅拷贝和深拷贝

浅拷贝:新开辟一块内存,只拷贝,通过原数据的首地址去获取内容。(类似于建立快捷方式)深拷贝:新开辟一块内存,将被拷贝内容全部拷贝过来(直接独立复制)

Echo_165的博客 4440

工程师必看:如何用定时截尾试验快速验证产品MTBF(附真实案例解析)

本文为硬件工程师详细解析了如何运用定时截尾试验快速验证产品MTBF(平均无故障工作时间)。通过七步实战法,结合工业物联网网关的真实案例,阐述了从参数设定、试验执行到结果判读的完整流程,并提供了MATLAB脚本实现自动化计算与可视化,帮助工程师在有限时间内科学评估产品可靠性。

weixin_29243063的博客 494

/proc/sys/vm/max_map_count耗尽时,调用glibc 2.11.3 free()导致程序crash,问题追踪和解决

1. 问题 在客户环境下,当我们的程序消耗较大内存时,会偶尔crash。 通过gdb分析,程序core dump在malloc/free函数内。 当把/proc/sys/vm/max_map_count 从65530增加到131070,程序再也不crash。 相关命令 echo 131073 > /proc/sys/vm/max_map_count 2.  core

万大胖博客,苦并快乐着 4430

Python中深拷贝和浅拷贝详解!

由于新对象与原始对象并无共享内存地址,故而二者完全独立,因此更改其中一个对象的值并不会影响另一个对象的值。浅复制是指新建一个对象,然后将原始对象的引用复制给新对象。由于新对象与原始对象同一内存地址,因此一个对象的值被修改后,另一个对象的值也会受到影响。深拷贝和浅拷贝在Python中是非常重要的存在,但很多人对它们了解的并不是很清楚,本文为大家详细讲解一下深浅拷贝的概念、使用场景以及注意事项,希望能够给你带来帮助。在使用深拷贝时,如果对象的层次结构比较复杂,可能会导致性能问题,因此必须小心使用深拷贝。

oldboyedu1的博客 1448

读懂 SAP S/4HANA 里的 SAP Fiori 架构:前端服务器、搜索链路、传统应用接入与内容组织全景解析

摘要:SAP Fiori架构并非简单的系统连接图,而是明确区分界面层与业务数据层的三层分工体系:用户交互层(浏览器与Fiori launchpad)、前端技术层(SAPUI5运行环境)和业务数据层(SAP S/4HANA后端)。这种分离实现了生命周期解耦,前端专注于统一体验治理,后端处理核心业务逻辑。值得注意的是,SAP Fiori front-end server本质仍是ABAP系统,负责UI技术组件运行。虽然SAP S/4HANA推荐嵌入式部署,但独立部署在多系统场景中仍有价值。典型Fiori应用通过O

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 179

【Python】python深拷贝与浅拷贝详解(必须掌握)

(关注“测试开发自动化” 弓中皓,获取更多学习内容)

测试开发自动化 1万+

基于STM32F1XX 、HAL库的OPT4001-Q1环境光传感器驱动应用C语言程序设计

OPT4001-Q1 的输出是半对数 的,具有 9 个二进制对数满量程照度范围,每个范围内具有高度线性响应,使得 PicoStar™ 型号的测量能力为 312.5μlux 至 84klux,USON 型号的测量能力为 400µlux 至 107klux。// 禁用中断(示例)

PP_Cottage的博客 461

HTML小游戏20 —— html5版开心斗地主小游戏(附完整源码)

100个H5游戏专栏🎮 目前已有100+小游戏,源码在持续更新中,前100位订阅限时优惠,先到先得。🐬 订阅专栏后可阅读100个HTML小游戏文章;还可私聊进前端/游戏制作学习交流群;领取一百个小游戏源码。在线演示地址:源码也可在文末进行获取。

前端好玩的小案例、游戏、工具 1万+

Python对象的浅拷贝与深拷贝笔记

做一个对象的浅拷贝不会克隆子对象。因此,副本并不完全独立于原件。对象的深层副本将递归地克隆子对象。克隆完全独立于原始副本,但创建深度副本的速度较慢。您可以使用copy模块复制任意对象(包括自定义类)。

m0_65482549的博客 1114

使用 MATLAB/Simulink 搭建一个 无人机群间数据交换与协同控制仿真系统

本文提供了一份详细的Simulink无人机群协同控制仿真教程。主要内容包括:无人机群系统架构设计(去中心化网络、通信分层)、三维运动建模、空-空通信链路实现(距离判断、无线信道)、分布式Consensus控制算法开发,以及性能评估指标设定。教程采用模块化设计思路,通过ModelReference构建多无人机并行模型,并给出了MATLAB函数实现关键算法。最后展示了预期仿真结果(收敛时间<15s、位置偏差<2m)和进阶应用方向(编队飞行、AI协同等),帮助读者掌握群体智能系统的建模与仿真方法。

amy_mhd的博客 156

python中对象的赋值、浅拷贝和深拷贝

1. 赋值:简单的对象引用 在python中,变量赋值实际上是简单的对象引用。在创建一个对象后,再把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是简单地拷贝了这个对象的引用。 (1)原子类型的赋值 &gt;&gt;&gt; x = 3.14 &gt;&gt;&gt; y = x &gt;&gt;&gt; x,y (3.14, 3.14) &gt;&gt;&gt; id...

Yvettre的博客 5234

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python进阶,对象赋值、浅拷贝、深拷贝的区别

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。深拷贝创建一个完全独立的对象,包括对象内部的所有嵌套对象。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

m0_59236602的博客 991

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python 实例对象 浅拷贝_Python对象中的浅拷贝和深拷贝

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。Python中的赋值语句不会创建对象的副本,而只是给对象绑定了新的名称。对于不可变对象,这通常没什么区别。但是在处理可变对象或可变对象集合时,你可能想找到一种方法来创建这些对象的“真正的副本”或“克隆”。本质上来说就是有时候你会希望拷贝被修改时原对象不会自动修改。在这篇文章中,我将会告诉你如何在Python...

weixin_39654058的博客 203

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【python】对象的拷贝:浅拷贝和深拷贝

浅拷贝只复制对象的顶层元素,如果对象中的元素是可变类型(如列表),则只复制这些子对象的引用地址,而不是引用的对象本身。浅拷贝中的元素,是原对象中子对象的引用,因此,如果原对象中的元素是可变的,改变其也会影响拷贝后的对象,存在一定的副作用。深度拷贝则会递归地拷贝原对象中的每一个子对象,生成一个全新的、完全独立的对象,因此拷贝后的对象和原对象互不相关。另外,深度拷贝中会维护一个字典,记录已经拷贝的对象及其ID,来提高效率并防止无限递归的发生。

MAOZI8的博客 1224

python对象的浅拷贝和深拷贝

(1)浅拷贝: python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象和拷贝对象会引用同一个子对象。 浅拷贝相当于将之前的对象本身进行拷贝,而其属性或方法(也是对象)没有拷贝,仍指向原来的地址,引用的是同一个子对象 (2)深拷贝: 使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不同 深拷贝将之前的对象本身进行拷...

qq_40170007的博客 166

python 实例对象 浅拷贝_Python对象的深拷贝和浅拷贝详解

本文内容是在《Python核心编程2》上看到的,感觉很有用便写出来,给大家参考参考!浅拷贝首先我们使用两种方式来拷贝对象,一种是切片,另外一种是工厂方法。然后使用id函数来看看它们的标示符# encoding=UTF-8obj = ['name',['age',18]]a=obj[:]b=list(obj)for x in obj,a,b:print id(x)352170323522791229...

weixin_39633102的博客 93

拷贝python对象之浅拷贝和深拷贝

1.对象赋值  在了解浅拷贝和深拷贝之前,我们必须搞清楚一个概念:对象的赋值实际上只是简单的对象引用,也就是说,当你创建一个对象,然后把它赋给一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。它们指向的仍然是同一块地址,可以把它理解为c语言中的指针. >>> a=[1,2,3,4] >>> id(a) 139867365855600 >>> b=a >>> [id

杨龙飞的博客 486

python—类和对象之浅拷贝和深拷贝详细讲解

一、变量的赋值操作 定义:只是形成2个变量,实际上还是指向同一个对象 代码如下: 内存示意图: 将创建CPU类的实例对象赋值给cpu1进行储存,所以cpu1的id为0212, 然后将cpu1赋值给cpu2,cpu2的id也为0212; cpu1和cpu2指向同一个类的实例对象。 在一个类中,有一个类的实例对象,用2个变量去存储。 二、浅拷贝 定义:python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象 代码: 代码执行结果为:可以看到compute

python全栈 6593

Python基础:对象的深拷贝和浅拷贝的区别

Python基础:对象的深拷贝和浅拷贝的区别1 变量与对象2 不可变对象与可变对象3 直接赋值4 浅拷贝5 深拷贝参考文献 1 变量与对象 对象:内存中存储数据的实体,有明确的类型。在Python中,一切都是对象,函数也是对象。 变量:指向对象的指针,对对象的引用。作为弱类型语言,Python中变量是没有类型的。 2 不可变对象与可变对象 不可变对象:对象对应内存中的值不会变,因此如果指向该对象的变量被改变了,会重新开辟一片内存,变量指向这个新的内存,包括int、float、str、tuple。 可变

紫芝的博客 259

python深拷贝一个对象_Python中深拷贝、浅拷贝问题

有一次面试的时候被问到了,记录一下。python中对于对象的拷贝分为两种方式:深拷贝和浅拷贝。浅拷贝用‘=’实现,深拷贝则使用deepcopy()函数完成。浅拷贝和深拷贝的区别是:浅拷贝只是将原对象在内存中引用地址拷贝过来了,让新的对象指向这个地址,这样新对象与原对象指向的地址相同;而深拷贝是将这个对象的所有内容拷贝过来了,包括值与内存地址,所以如果你这时候修改原来对象的值跟新对象没关系了,不会随...

weixin_39837207的博客 466

Python对象的浅拷贝和深拷贝(番外---对象拷贝)

对象的浅拷贝和深拷贝 变量的赋值操作 只是形成两个变量,实际还是指向同一个对象 浅拷贝 Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象和拷贝对象会引用同一个子对象。 深拷贝 使用copy模块的deepcopy函数,递归拷贝对象中包含的字对象,源对象和拷贝对象所有的子对象也不同。 【例子】 # 测试对象的浅拷贝、深拷贝 import copy class MobilePho...

偷得浮生半日闲 323

python怎样给对象赋值_Python对象赋值、浅拷贝和深拷贝

总结:1、copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象2、copy.deepcopy 深拷贝 拷贝对象及其子对象1、对象赋值will = ["Will", 28, ["Python", "C#", "JavaScript"]]wilber = will #对象赋值(对象引用)print id(will)print willprint [id(ele) for ele i...

weixin_39598135的博客 1800

Python深拷贝与浅拷贝:避开对象复制的陷阱

实现__copy__和__deepcopy__方法# 浅拷贝实现# 深拷贝实现处理循环引用(使用memo字典)避免无限递归保持对象状态一致性深浅拷贝的选择,本质是时间与空间的权衡。在Python编程中,理解对象引用的机制,就像掌握精密仪器的操作手册,能让你在代码优化时更加游刃有余。记住:浅拷贝像复印文件的首页,深拷贝则是逐页复制整本书。合理选择拷贝方式,能让你的程序既高效又安全。

这家伙很懒,什么都没有留下 932
上一篇: #yyds#数据分析从零开始实战,Python、Pandas与各类数据库
下一篇: 超有趣的Python实战:将图片转成像素风
Python_xiaowu
博客等级 码龄5年 3096粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值