深拷贝,浅拷贝

浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制

深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。实现真正的一个改变另一个不变!!(除了不可变数据类型)以列表举例

直接赋值

    这种情况拷贝前后列表的地址一样,里边元素的地址也一样。对不可变数据类型修改,会导致两个列表进行修改的元素都改变,对可变数据类型的修改导致两个列表进行修改的元素都改变

          等号=赋值外层与内层都是引用,所以一变都变

浅拷贝:

产生新的对象,所以大地址改变了

有3种方式:

1.切片赋值0

    这种情况拷贝前后列表的地址不一样,里边元素的地址一样。对不可变数据类型修改,会导致进行修改的列表的元素地址改变,对可变数据类型的修改导致两个列表进行修改的元素都改变

2.工厂函数(list(),tuple(),dict())

    这种情况拷贝前后列表的地址不一样,里边元素的地址一样。对不可变数据类型修改,会导致进行修改的列表的元素地址改变,对可变数据类型的修改导致两个列表进行修改的元素都改变

3.copy方法

    这种情况拷贝前后列表的地址不一样,里边元素的地址一样。对不可变数据类型修改,会导致进行修改的列表的元素地址改变,对可变数据类型的修改导致两个列表进行修改的元素都改变

 

深拷贝:

deepcopy()方法

    这种情况拷贝前后列表的地址不一样,里边元素的地址也不一样(不可变数据类型也不变。对不可变数据类型修改,会导致进行修改的列表的元素地址改变,对可变数据类型的修改导致两个列表只有进行修改的那个列表元素改变

 

不可变数据类型不存在拷贝(改谁直接重新开辟一块内存空间,所以改谁谁变)

浅拷贝不进行数据拷贝,而是拷贝引用

深拷贝进行数据重新拷贝(除不可变数据类型)

 

如果元组中只有不可变类型,则不能进行拷贝

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值