欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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、效率高

相关标签: python python