Python中copy与deepcopy的区别详解:浅复制与深复制实战

认真发呆
认真发呆
发布时间:2026-10-13| 2人浏览过
原创

本文深入解析Python中copy与deepcopy的核心区别。通过字典和列表的实操案例,展示浅复制在嵌套对象修改时的共享引用问题,以及深复制如何实现完全独立的新对象。文章涵盖字典内置copy方法与copy模块函数的行为差异,帮助开发者避免内存共享导致的意外修改。

作为一名编程爱好者,近期我开始接触Python编程,在数据处理过程中遇到了copy和deepcopy两个方法,起初对此感到困惑。为了厘清概念,本文将重点区分这两种复制方式:一种是浅复制(copy),另一种是深度复制(deepcopy)。

首先介绍deepcopy。从我的理解来看,深度复制意味着完全复制原对象并生成一个全新的独立对象。此时,复制后的对象与原对象之间没有任何关联,无论对哪一个进行何种修改,都不会影响另一个,二者完全独立。

接下来讨论copy方法。这里需要将其分为两种情况来阐述:一是字典数据类型自带的copy函数,二是import copy模块后使用的copy函数。

第一类情况是字典数据类型的copy函数。当仅进行简单的值替换操作时,原始字典与复制得到的字典之间互不影响;然而,当涉及添加、删除等修改操作时,两者之间可能会产生相互影响,具体表现取决于数据结构。

(1)值替换场景

import copy 
d = { 
  'name' : ['An','Assan'] 
} 
c = d.copy() 
dc = copy.deepcopy(d) 
d['name'] = ['an'] 
print c 
print d 
print dc 

运行结果如下:

{'name': ['An', 'Assan']} 
{'name': ['an']} 
{'name': ['An', 'Assan']} 

(2)值修改场景

import copy 
d = { 
  'name' : ['An','Assan'] 
} 
c = d.copy() 
dc = copy.deepcopy(d) 
d['name'].append('shu') 
print c 
print d 
print dc 

运行结果如下:

{'name': ['An', 'Assan', 'shu']} 
{'name': ['An', 'Assan', 'shu']} 
{'name': ['An', 'Assan']} 

第二类情况是copy包中的copy函数。在此情况下,无论是进行值的修改还是值的替换,原始序列与复制后的序列之间均互不影响,表现出较好的独立性。

import copy 
seq = [1,2,3] 
seq1 = seq 
seq2 = copy.copy(seq) 
seq3 = copy.deepcopy(seq) 
seq.append(4) 
seq2[2] = 5 
print seq,seq1,seq2,seq3 

运行结果如下:

[1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 5] [1, 2, 3] 

在上述代码示例中,语句sql1 = seq实际上是指向同一个对象地址,即两者使用的是同一个对象引用。

总结

以上就是本文关于Python中copy和deepcopy区别的全部内容,希望以上内容能对大家有所帮助。感兴趣的朋友可以继续查阅本站的相关文章,如python实现微信接口(itchat)详细介绍、基于Python和Scikit-Learn的机器学习探索等。如有任何疑问,欢迎随时留言,小编会及时回复。鉴于小编也是Python初学者,以下推荐本站提供的几本关于Python的书籍,支持免费下载,供各位学习参考:

《Python算法教程》([挪威]赫特兰著)中文完整pdf扫描版

https://www.jb51.net/books/539629.html

《Python核心编程》(第3版)([美] Wesley Chun著)中文pdf完整版

https://www.jb51.net/books/537404.html

希望大家能够喜欢,感谢朋友们对本站网站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。