当前位置:   article > 正文

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

python深拷贝浅拷贝和赋值

一、什么是赋值?
在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.赋值不等于浅拷贝(个人理解是这样的,因为他没有生成新的对象)

                                                                                                       -----------------------------------------学海无涯 
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/71436
推荐阅读
相关标签
  

闽ICP备14008679号