在 Python 编程中,我们经常需要对对象进行拷贝。拷贝可以分为浅拷贝和深拷贝。浅拷贝和深拷贝的区别在于:浅拷贝会创建对象的副本,而不拷贝对象内部的子对象;但深拷贝会拷贝所有的子对象,递归地拷贝到底。那么什么时候该用浅拷贝,什么时候该用深拷贝呢?本文将通过示例代码阐述 Python 中浅拷贝和深拷贝的区别,以及应用场景。
在 Python 中,简单给一个变量赋值,实际上是做对象的浅拷贝。也就是说,新旧变量共享内存中同一对象。
python
import copy
a = 1, 2, 3
b = a
print(a is b) # True, a和b指向同一对象
b.append(4)
print(a) # 1, 2, 3, 4, a也发生了变化
上面代码中,a 和 b 变量指向了同一个列表对象,所以修改 b 也会影响到 a。
除了直接赋值外,一些常见的浅拷贝方式还包括:
b0.append(4)
print(a) # [1, 2, 4, 3] 子对象互相影响
print(b) # [1, 2, 4, 3, 4]
而深拷贝不同,它会新建对象,以及递归拷贝对象中的所有子对象。Python 中深拷贝可以使用 copy 模块的 deepcopy 函数实现。
python
import copy
a = [1, 2, 3]
b = copy.deepcopy(a)
b.append(4)
b0.append(4)
print(a) # [1, 2, 3] 不受影响
print(b) # [1, 2, 4, 3, 4]
从例子可以看出,深拷贝会完全拷贝对象本身和子对象,修改拷贝后对象不会影响到原对象。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。