赞
踩
一、什么是赋值?
在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.赋值不等于浅拷贝(个人理解是这样的,因为他没有生成新的对象)
-----------------------------------------学海无涯
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。