python赋值、浅拷贝和深拷贝的区别
程序员文章站
2022-05-19 15:18:02
...
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、效率高
下一篇: 结婚后应如何保持婚姻幸福呢?