网站首页 > 技术文章 正文
在 Python 里,浅拷贝和深拷贝是处理对象复制时的重要概念,下面将分享下它们的原理、异同、避坑方法,并且给出示例代码。
基本概念
- 浅拷贝:浅拷贝会创建一个新对象,不过新对象里的子对象依旧是原对象中子对象的引用。也就是说,浅拷贝只复制对象的一层结构,对于对象内部的嵌套对象,只是复制了引用,而非对象本身。
- 深拷贝:深拷贝会创建一个全新的对象,并且递归地复制原对象的所有子对象。这意味着深拷贝会完全复制对象及其所有嵌套对象,新对象和原对象没有任何引用关联。
异同点
- 相同点:浅拷贝和深拷贝都会创建一个新的对象。
- 不同点:浅拷贝仅复制对象的一层结构,新对象的嵌套对象和原对象的嵌套对象共享内存;而深拷贝会递归地复制所有嵌套对象,新对象和原对象完全独立。
避坑方法
- 浅拷贝:要是原对象的嵌套对象会被修改,那么浅拷贝可能会引发意外的结果,因为新对象和原对象共享嵌套对象的引用。所以,当需要修改嵌套对象时,要使用深拷贝。
- 深拷贝:深拷贝会递归地复制所有对象,这可能会消耗大量的内存和时间,尤其是在处理大型对象或者有循环引用的对象时。所以,在性能敏感的场景下,要谨慎使用深拷贝。
示例代码
python
import copy
# 定义一个嵌套列表
original_list = [1, 2, [3, 4]]
# 浅拷贝
shallow_copied_list = copy.copy(original_list)
# 深拷贝
deep_copied_list = copy.deepcopy(original_list)
# 修改原列表的嵌套列表
original_list[2][0] = 99
print("原列表:", original_list) # 输出: 原列表: [1, 2, [99, 4]]
print("浅拷贝列表:", shallow_copied_list) # 输出: 浅拷贝列表: [1, 2, [99, 4]]
print("深拷贝列表:", deep_copied_list) # 输出: 深拷贝列表: [1, 2, [3, 4]]
在这个示例中,对原列表的嵌套列表进行修改后,浅拷贝列表的嵌套列表也随之改变,这是因为浅拷贝只复制了引用;而深拷贝列表不受影响,这是因为深拷贝创建了一个完全独立的对象。
感谢大家对《新手学Python避坑,学习效率狂飙!》系列的点赞、关注和收藏今天这编是第十五个分享,前面还有十四个,大家可以关注下。
猜你喜欢
- 2025-06-12 新手学Python避坑,学习效率狂飙! 二、Python 代码缩进
- 2025-06-12 告别Ctrl+C/V!这个Python神器让Excel自动化效率提升500倍
- 2025-06-12 提升 Python 效率,尽在 Pydash —— 高效数据处理的终极工具包
- 2025-06-12 新手学Python避坑,学习效率狂飙! 六、Python 默认可变参数
- 2025-06-12 【团队效率提升】Python-PyWebIO介绍
- 2025-06-12 新手学Python避坑,学习效率狂飙! 三、Python 数据类型
- 2025-06-12 如何用Python处理大数据?3个小技巧助你提升效率(建议收藏)
- 2025-06-12 纯Python构建精美UI!MonsterUI让前端开发效率飙升
- 2025-06-12 用好这几个Python高阶函数!效率翻倍
- 2025-06-12 每天一个 Python 库:pandas 办公利器,数据处理效率翻倍!
- 06-15python 打地鼠小游戏(打地鼠小游戏代码)
- 06-15浅析 Python 中的队列类(python队列函数)
- 06-15python委托定制超类getattr和getattribute管理属性
- 06-15python 内置函数 getattr(python内置函数的用法)
- 06-15一文掌握Python 的 getattr函数(python中getattribute)
- 06-15Python 字典 get() 方法:操作指南
- 06-15python入门到脱坑函数—语法详解(python函数教程)
- 06-15python中的流程控制语句:continue、break 和 return使用方法
- 266℃Python短文,Python中的嵌套条件语句(六)
- 265℃python笔记:for循环嵌套。end=""的作用,图形打印
- 264℃PythonNet:实现Python与.Net代码相互调用!
- 259℃Python实现字符串小写转大写并写入文件
- 258℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 118℃原来2025是完美的平方年,一起探索六种平方的算吧
- 99℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 92℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
-
- python 打地鼠小游戏(打地鼠小游戏代码)
- 浅析 Python 中的队列类(python队列函数)
- python委托定制超类getattr和getattribute管理属性
- python 内置函数 getattr(python内置函数的用法)
- 一文掌握Python 的 getattr函数(python中getattribute)
- Python 字典 get() 方法:操作指南
- python入门到脱坑函数—语法详解(python函数教程)
- python中的流程控制语句:continue、break 和 return使用方法
- 在Python中将函数作为参数传入另一个函数中
- Python:读取文本返回关键词及其权重
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)