python 之深拷贝、浅拷贝整理

                                                   深拷贝、浅拷贝整理

一、深拷贝&浅拷贝

Python中,进行对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。

注意如下3点规则:

(1)直接赋值,默认浅拷贝传递对象的引用而已,原始数据改变,被赋值的对象也会有相同的改变

(2)copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

(3)深拷贝,包含对象里面的对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

而在对象赋值过程中,需关注是否为可变数据类型,不可变对象的值改变了,引用的地址就改变了; 可变对象的值改变,但引用的地址不变。

如:x和y的重新赋值会导致x,y指向其他地址,但是l一直指向同一个地址

def func(x,y,l):
    x = y+1
    l.append(0)
    
if "__main__" == __name__:
    x=10; y=10; l=[3,2,1]
    func (x,y,l)
    print (x,y,l)

可看出x,y的值没有变化,而l变了,x=10,y=10,只是对“10”的同一个引用,x和y函数中的x重新赋值,指向地址id(x)已经改变,而l指向地址不变。

参考:

https://segmentfault.com/q/1010000014678457

https://www.cnblogs.com/xueli/p/4952063.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值