浅谈Python的赋值、深、浅拷贝

本文探讨了Python中的赋值原理,指出赋值并不创建新对象,而是引用原有值的地址。浅拷贝与深拷贝的区别在于浅拷贝只复制表层,子对象不变;深拷贝则包含所有层级的对象。浅拷贝方法包括切片、工厂函数和copy方法,而深拷贝需用copy模块的deepcopy。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是赋值?
在Python中,赋值需要使用运算符“=”,赋值并不会生成一个新的对象。赋值操作是引用了原变量值的地址。
当原变量的值发生更改时,赋值变量的值也会同步更改。
举个例子:
a=5的含义是Python解释器在内存中开辟了一个地址来存储“5”这个值,而a=5实际是变量a在引用该值的地址。这里跟指针很像;b=a,实际上是变量b引用了“5”的地址。a、b变量均指向了同一个地址。附件所示就是赋值变量与原变量指向的地址均一致。
在这里插入图片描述
补充:使用新变量将对应的值更改后,老变量的值也会随之更改(赋值操作是引用了原变量值的地址),实际是在更改指定地址中的值。
二、什么是浅拷贝
通俗的来讲,浅拷贝只是拷贝表层的内容。拷贝会生成一个新的对象,新生成对象的id与原对象的id不同,由于浅拷贝只会拷贝最表层的对象,因此当被拷贝对象中存在子对象时,子对象的id不会发生改变,会与原对象中子对象的id保持一致。
在这里插入图片描述
三、常见的浅拷贝方法
1. 切片
2. 利用工厂函数(可变对象的工厂函数,list、dict、set)
3. 利用对象自带的copy方法啊(只有可变类型的数据类型有该方法,如list、dict、set)
4. 利用copy库中的copy方法
在这里插入图片描述
注意!第2点强调为可变对象的原因是,如果是不可变对象如元组,使用工厂函数后,不会生成新的对象。
在这里插入图片描述
注意!浅拷贝完成之后,老对象的值发生变更,新对象均不会受影响 在这里插入图片描述

四、什么是深拷贝
将对象的表层包括其子对象一并拷贝,生成的新对象的id及其子对象的id均与老对象不同。
在这里插入图片描述
注意!深拷贝的时候,如果子对象是不可变的数据类型,那么拷贝之后,子对象的id不会改变
在这里插入图片描述

小结:
1.浅拷贝常用的方法有:切片、可变对象的工厂函数、可变对象的copy函数、copy模块的copy方法
2.深拷贝需要使用copy模块的deepcopy方法才可以实现
3.赋值不等于浅拷贝(个人理解是这样的,因为他没有生成新的对象)

                                                                                                       -----------------------------------------学海无涯 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值