python赋值、浅拷贝和深拷贝的区别

python的三种赋值方式

1、直接赋值
2、浅拷贝
3、深拷贝

直接赋值

直接赋值,就是对对象的引用,复制的是对象的地址值,名字不同,操作的还是同一个对象。

a = [[1,2],[3,4],5]
b = a
print(b) # [[1,2],[3,4],5]

浅拷贝

浅拷贝,就是拷贝的是父对象,不会拷贝到内部的子对象(对象中保存的是地址值,这里直接拷贝地址值,没有递归拷贝)(b=a[:]也是浅拷贝)

import copy
a=[1,2,[3,4],5]
b=copy.copy(a)
print(b)
# 结果为 [1,2,[3,4],5]
# 接下来我们更改a的数据
a.append(6)
print(a)
print(b)
# 结果为 [1,2,[3,4],5,6]和[1,2,[3,4],5]
# 可以发现浅层的数据更改(第一层)并没有让b发生变化
# 接下来进行子对象数据(深层数据)的更改
a[2].append(7)
print(a)
print(b)
# 结果为 [1,2,[3,4,7],5,6]和[1,2,[3,4,7],5]
# 可以发现b发生了改变

深拷贝

拷贝对象时,遇到地址值时,会再进行拷贝对象,而不是地址值,我理解我递归拷贝。

import copy
a=[1,2,[3,4],5]
b=copy.deepcopy(a)
print(b)
# 结果为 [1,2,[3,4],5]
# 接下来我们更改a的数据
a.append(6)
print(a)
print(b)
# 结果为 [1,2,[3,4],5,6]和[1,2,[3,4],5]
# 可以发现浅层的数据更改(第一层)并没有让b发生变化
# 接下来进行子对象数据(深层数据)的更改
a[2].append(7)
print(a)
print(b)
# 结果为 [1,2,[3,4,7],5,6]和[1,2,[3,4],5]

总结

一般情况下,会使用浅拷贝,浅拷贝具有以下优点:
1、花费时间少
2、花费内存少
3、效率高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值