python中深拷贝,浅拷贝

Python —— 深拷贝和浅拷贝 阅读详情

 

 

#_author:'DJS'
#date:2018-12-09
#一个变量等于xx是指向,浅拷贝拷贝的是最顶层(拷贝的是引用而不是数据)的,深拷贝拷贝的是全部(相当于备份)
import copy
import sys
print(sys.path) #查看导入模块的先后路径
a = [1,2,3] #表示的a指向这个列表
b = [4,5,6,]
print(id(a))
print(id(b))

b.append(7)
print(b)

c = copy.deepcopy(b) #深拷贝,只拷贝数据值,不拷贝内存的地址
print(c)
print(id(c))
b.append(8)
print(b)
print(c)

##copy.copy() #浅拷贝,把xx里面的东西拷贝出来,但是数据不拷贝,直接拷贝它的指向(即引用)。
即在另外一个列表中的数据指向是不变的
浅拷贝,拷贝xx时候指向了一个新列表,列表里面的东西指向不变。只是多了一个列表,开辟多了一份
内存。浅拷贝共享的是拷贝时的数据(如a,b数据,a,b加数据的时候e里面的数据也会加),后面多加的不共享
如c里面多加一个列表,那么e不会共享c里面多加的列表
c = [a,b]
d = c
e = copy.copy(c)
# print(id(e))
# print(id(c))
print(id(c[0]))
print(id(e[0]))
a.append(66)
print(c)
print(e)


##copy.deepcopy() #深拷贝,平时用的复制属于深拷贝
c = [a,b]
d = copy.deepcopy(c)
a.append(77)
print(id(c))
print(id(d))
print(id(c[0]))
print(id(d[0])) #深拷贝的时候,开辟新的内存空间,然后拷贝数据过去。数据的指向变了。
print(c)#
print(d)#a中增加数据,但是d中没有增加
a = (2,3) #元组是不可变类型,如果copy.copy()拷贝的是元组,不是浅拷贝,因为元组是不可变类型
#所以数据是不开修改的,所以copy.copy()拷贝的是元组的时候就是指向了。不是浅拷贝了
b = copy.copy(a)
print(id(a))
print(id(b))

###如果用copy.copy()或者copy.deepcopy()对一个全部都是不可变类型(如元组,或者字符串,数字)的数据进行拷贝,那么
#他们的结果相同,都是引用指向。如果拷贝的是一个拥有不可变类型的数据(相当于元组里面有列表),即使元组时最顶层
#那么copy.deepcopy()依然是深拷贝(拷贝全部的数据,而不是指向)。而copy.copy()还是指向
#即是copy.copy()拷贝元组的时候是指向全部,拷贝列表的时候不是指向正个列表,而是创建一个新的列表
#再指向被拷贝的列表的数据。即是copy.copy()拷贝可变的数据时不能把他整个内存地址考出来
#但是拷贝不可变的数据的时候,可以把内存地(引用指向)址也拷贝了。可变的拷贝不完,不可变的可以拷贝完。
a = [1,3,2]
b = [3,4,5]

e = (a,b)
f = copy.copy(e) #浅拷贝,拷贝元组的时候照样是拷贝全部的指向。整个元组的指向
print(id(e))
print(id(f))
h = copy.deepcopy(e)#深拷贝,拷贝元组的时候
print(id(e))
print(id(h))




python中复制即引用,也可以认为是浅拷贝。

 

 

 

 

 

描述Python中的浅拷贝和深拷贝 浅拷贝会创建一个新的对象,这个对象有着原始对象中的一些值的新拷贝。但是,如果属性是引用其他对象(如列表、字典或其他自定义对象),则浅拷贝不会拷贝这些对象本身,而只是拷贝它们的引用。这意味着原始对象和深拷贝对象是完全独立的,对其中一个的任何修改都不会影响另一个。注意,当我们修改浅拷贝列表中的子列表时,原始列表中的相应子列表也被修改了,因为这两个列表实际上共享了同一个子列表对象。注意,这次当我们修改深拷贝列表中的子列表时,原始列表没有发生变化,因为这两个列表是完全独立的。修改浅拷贝列表中的子列表。 阅读详情

相关推荐

Python中的深拷贝和浅拷贝的区别

深拷贝和浅拷贝是Python中非常重要的概念,它们在处理对象和数据结构时有着截然不同的行为。理解深拷贝和浅拷贝的区别以及适用场景对于面试和实际编程工作都非常有帮助。在选择深拷贝和浅拷贝时,需要根据具体的需求和数据结构来决定。

这家伙很懒,什么都没有留下 2349

python的深浅拷贝

copy函数是浅拷贝,只对可变类型的第一层对象进行拷贝,对拷贝的对象开辟新的内存空间进行存储,不会拷贝对象内部的子对象。对于不可变对象而言,浅拷贝只是引用赋值。deepcopy函数是深拷贝,对于可变类型,深拷贝是逐层进行拷贝。对于不可变类型而言,也是引用赋值。# 对于不可变对象来说,无论深浅拷贝 都不会进行拷贝,只是引用赋值。# 对于可变对象,浅拷贝只拷贝第一层数据,深拷贝会逐层拷贝。可变对象中,保存的可变数据。可变对象中保存不可变数据。

weixin_63510164的博客 2484

从零配置Archery:手把手教你用Docker部署多数据库审核系统(MySQL/PostgreSQL/ClickHouse)

本文详细介绍了如何从零开始使用Docker部署Archery多数据库审核系统,涵盖MySQL、PostgreSQL和ClickHouse的配置与整合。文章提供了生产级Docker-compose配置、审核规则定制、工单流程设置以及企业微信通知集成等实战指南,帮助团队构建统一的企业级SQL审计平台,提升数据库操作规范与安全。

e4f5g6h7的博客 941

python中深拷贝与浅拷贝的详细解释

在Python中,当我们对一个对象进行拷贝时,有两种方式:浅拷贝和深拷贝。浅拷贝创建了一个新的对象,其中包含原始对象的引用,而深拷贝则创建了一个完全独立的新对象,其中包含原始对象所有数据的副本。这意味着在原始对象和拷贝对象之间进行更改时,浅拷贝可能会导致不期望的结果,而深拷贝则不会。# 从输出中可以看出,当我们更改原始对象的嵌套列表时,浅拷贝的对象也会受到影响,而深拷贝的对象则不会受到影响。# 这是因为浅拷贝只复制了原始对象的引用,而深拷贝则复制了整个嵌套列表。# 打印原始对象和两个拷贝的对象。

weixin_49786960的博客 557

不用FFmpeg!纯前端实现RTSP直播的3种现代方案对比(WebSocket/Wasm/WebCodecs)

本文深入探讨了纯前端实现RTSP直播的三种现代技术方案:WebSocket代理转发、Wasm解码和WebCodecs硬解。通过详细的架构设计、性能实测数据和兼容性分析,帮助开发者在安防监控、智慧城市等场景中选择最佳方案,实现低延迟、高效率的视频流处理。

lilh34434的博客 231

手把手教你用DLP4500和海康相机搭建双目结构光系统(附完整代码获取路径)

本文详细介绍了如何利用DLP4500投影仪和海康工业相机搭建低成本双目结构光三维测量系统。从硬件选型、软件配置到结构光编码解码实现,再到三维重建全流程,提供了完整的实战指南和优化技巧,帮助用户以不到2万元的预算实现0.05mm精度的三维扫描。

weixin_32447969的博客 317

【Python】深拷贝与浅拷贝

浅拷贝:只拷贝当前实例对象,不改变其子对象指向(ps:一个人的变动)深拷贝:拷贝时同时拷贝其引用子对象,指向拷贝的新对象(ps:一家人的变动)

yeluoyeqiushui的博客 220

Ubuntu20.04运行Vins-fusion

因已安装ROS noetic,eigen,opencv及ceres等库,这部分环境配置就不细讲,直接下载VINS-FUSION的代码库 下载编译 cd ~/vins-fusion/src git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git cd ../ catkin_make source ~/catkin_ws/devel/setup.bash 编译时会发现一堆错误,别急,无非就是环境冲突问题,一个个解决 1)首先,ROS

xiaojinger_123的博客 1万+

python的深拷贝和浅拷贝

深浅拷贝都是会开辟一片新的地址空间,浅拷贝复制完如果原对象是修改的元素是可变对象,那么浅拷贝的新对象也会随之变化,深拷贝由于使用递归的方式进行复制,因此他不会受影响。深拷贝 copy.deepcopy()浅拷贝 copy.copy()

meini32的博客 218

概率论基础-严士健 第二版 习题与补充1.6答案

概率论基础-严士健 第二版 习题与补充1.6答案 1.不独立。 设有一均匀正八面体,其第1,2,3,4面染红色,第1,2,3,5面染白色,第1,6,7,8面染黑色,现在以A,B,C分别表示投一次正八面体出现红、白、黑的事件,则 P(A)=P(B)=P(C)=12.P(A) = P(B) = P(C) = \frac{1}{2}.P(A)=P(B)=P(C)=21​. P(ABC)=18=P(A)P...

weixin_42341993的博客 2515

设备接入与APP(应用程序)接入华为云iotDA平台的详细操作步骤及获取方式

设备及APP(应用程序) 登录 IoTDA 平台所需的 入场与操作清单内容,提供逐项详细操作步骤和获取方式,并穿插贴士便于理解与实际操作落地。内容基于 华为云 IoTDA 控制台 和 IAM 控制台 的实际使用路径整理。

hy行者勇哥的博客 3059

Python中的深拷贝和浅拷贝

在Python中,拷贝是用于创建变量或对象副本的一种方式。深拷贝和浅拷贝是Python中两种不同的拷贝方式。它们之间的差异在于拷贝后的变量或对象副本与原始变量或对象的关系以及它们所占用的内存空间。

judahwang的博客 1335

73、结合无人机进行rk3588oak-lite跟踪目标物体进行识别、跟踪

搭建仿真转换模型环境,主要python版本和我下载的rknn2的版本。截取shape节点,输出模型。so库也要对应转模型的whl。其中安装的whl版本。

sxj731533730 1624

Python 深拷贝和浅拷贝详解

Python深拷贝和浅拷贝详解 浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。 深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。 1.浅拷贝 使用数据类型本身的构造器 对于可变的序列,还可以通过切片操作符 : 来完成浅拷贝 Python 还提供了对应的函数 copy.copy() 函数,适用于任何数据类型 1.1 使用数据类型本身的构造器 lis

qq_40630902的博客 5万+

Aurix TC3xx系列MCU ResourceM模块配置(多核资源分配)

为减轻主核的负载率或者平衡各个核的资源分配,通常需要把一些MCU内部资源分配到从核上,在EB tresos工具中,通过ResourceM模块实现多核资源分配。

m0_38045338的博客 1388

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python:深拷贝,浅拷贝,赋值引用

第一部分转载自:https://www.cnblogs.com/xueli/p/4952063.html 1. python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,["a","b"]] (1)直接赋...

bufengzj的博客 6万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python浅拷贝与深拷贝的区别

一、浅拷贝 浅copy:是把原列表第一层的内存地址不加区分完全copy一份给新列表 list1=[ '狄仁杰', 18, [1,2] ] 注意 list2 =list1 这不叫拷贝,只能说list2与list1 指向了相同的内存地址 ```go >>> list1=["狄仁杰",18,[1,2]] >>> list2=list1.copy() # 浅拷贝 >>> print(id(list1)) 1845462466816 &

人丑就要多读书的博客 4898

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

python篇 深拷贝与浅拷贝

## 1.拷贝概念 >如果各位捧场的读者老爷对python中‘’is‘’和‘’==‘’运算符的概念如我一样有些许了解的话,那应该知道当我们在将一个变量赋予另一个变量如“a = b ”时,如果b的值在小整型缓存区(-5~256)内,那么所谓的将b值赋值给a就只是引用同一个内存数据罢了。深拷贝浅拷贝有点类似于这个,“浅”字在这里的意思就是浅浅一层,仅能能拷贝对象的表层,而其子对象,就是直接拿来引用了,所谓深拷贝就是用递归的原理把其子对象也依次拷贝下来,这就是两者的区别。

undefineing的博客 4578

python深拷贝和浅拷贝

深拷贝和浅拷贝都是用于复制对象的概念。浅拷贝在复制对象时,仅复制其引用,而非复制对象本身。这意味着原对象和新对象都指向相同的内存地址,修改一个对象会影响另一个对象。如果有一点C语言基础,那么可能马上意识到,浅拷贝相当于复制了指针,而深拷贝则相当于新开辟了一块内存。

微小冷的学习笔记 1537

Python 的深拷贝与浅拷贝详解

Python 深拷贝与浅拷贝

威桑的博客 2173

Python: 浅拷贝和深拷贝

Python: 浅拷贝和深拷贝

永远怀着至诚之心拥抱世界 1400

python 深拷贝和浅拷贝

在 Python 的世界里,复制对象并不像表面看起来那么简单。深拷贝和浅拷贝这两种复制方式,就像魔法师的两种咒语,创造出不同的复制效果。它们看似相似,却有着本质的区别。想要避免程序中潜藏的陷阱,就需要理解这两种复制方式的奥秘,并选择正确的咒语来复制你的对象!

知命不惧,日日自新。 766

别再弄不清Python 深拷贝和浅拷贝了!

通过输出结果我们可以发现直接赋值来的b和a是完全一样的,同步修改了所有,说明直接赋值来的新变量,不管是对象本身,还是对象中包含的子对象,都是一样的、完全相同;通过浅拷贝来的对象c只是子对象的修改和a保持了一致,对象本身的修改并没有生效,说明浅拷贝是将对象本身的引用复制给新对象,但是包含的子对象还是和之前一致的;b为直接(a)赋值来的结果,c为浅拷贝(a)来的结果,d为深拷贝(a)来的结果。浅拷贝出来的对象就是外新内旧的对象,对象本身(id)和原始对象完全不同,但是子对象和原始对象的子对象是一样的。

Python栈_基的博客 881

python浅拷贝与深拷贝

最近看了一些Python的教学视频,其中看到一个关于Python拷贝(浅拷贝与深拷贝)的知识点,老师说这是重点,所以在这里分享一下我对浅拷贝与深拷贝的理解。 Python的拷贝方式分为两种,一种是浅拷贝,另一种是深拷贝,所谓浅拷贝,通俗点说就是把一个变量的值赋给另一个变量,Python对变量赋值的处理方式和C、C++不同,对于某个赋值语句如a=100,C、C++是开辟...

Viadimir的博客 620

Python 中深拷贝和浅拷贝

在 Python 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是两种常见的对象复制方式。它们之间的主要区别在于拷贝的对象以及拷贝过程中引用的处理方式。

郝开的博客 875
上一篇: python私有化,import,封装,继承,多态
下一篇: python中的队列,进程池
djs123DJS
博客等级 码龄9年 49粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值