前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中的深浅拷贝区别解析

Python中的深浅拷贝区别解析

原创
作者头像
疯狂的KK
发布2023-08-02 15:05:43
2770
发布2023-08-02 15:05:43
举报
文章被收录于专栏:Java项目实战

1. 引言

在 Python 编程中,我们经常需要对对象进行拷贝。拷贝可以分为浅拷贝和深拷贝。浅拷贝和深拷贝的区别在于:浅拷贝会创建对象的副本,而不拷贝对象内部的子对象;但深拷贝会拷贝所有的子对象,递归地拷贝到底。那么什么时候该用浅拷贝,什么时候该用深拷贝呢?本文将通过示例代码阐述 Python 中浅拷贝和深拷贝的区别,以及应用场景。

2. 浅拷贝

在 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。

除了直接赋值外,一些常见的浅拷贝方式还包括:

  • 切片操作:new_list = old_list:
  • dict() 函数:new_dict = dict(old_dict)
  • set() 函数:new_set = set(old_set) 这些浅拷贝只会拷贝对象本身,而不会拷贝对象中的子对象。比如: python a = [1, 2, 3] b = list(a) # 浅拷贝 b.append(4) print(a) # [1, 2, 3] 不受影响 print(b) # [1, 2, 3, 4]

b0.append(4)

print(a) # [1, 2, 4, 3] 子对象互相影响

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

3. 深拷贝

而深拷贝不同,它会新建对象,以及递归拷贝对象中的所有子对象。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]

从例子可以看出,深拷贝会完全拷贝对象本身和子对象,修改拷贝后对象不会影响到原对象。

4. 应用场景

  • 浅拷贝:当对象中的子对象可以共享,或者不需要拷贝子对象时,可以使用浅拷贝,比如切片操作、字典拷贝等。这种方式提高了执行效率。
  • 深拷贝:当需要修改拷贝对象时使用深拷贝,这可以防止对原对象的影响。比如需要重复使用的对象模板,每次使用前需要做深拷贝。
  • 直接赋值:如果两个变量需要共享对象,只需要简单赋值即可。5. 总结
  • Python 中通过直接赋值实现对象的浅拷贝。浅拷贝只拷贝对象本身,不会拷贝子对象。
  • 深拷贝通过 copy 模块的 deepcopy 实现,它会递归拷贝对象的子对象。
  • 浅拷贝适用于子对象可以共享的场景,可以提高执行效率;深拷贝适用于需要修改拷贝对象而不影响原对象的场景。
  • 直接赋值使两个变量共享一个对象。
  • 正确理解浅拷贝和深拷贝的区别,可以帮助我们编写更加安全高效的Python程序。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引言
  • 2. 浅拷贝
  • 3. 深拷贝
  • 4. 应用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档