Python列表复制全解析:直接赋值、浅拷贝与深拷贝的区别

小林子
小林子
发布时间:2026-10-14| 5人浏览过
原创

本文深入解析Python中列表复制的三种主要方式:直接赋值、切片及copy()与deepcopy()。通过代码实例对比内存地址变化,重点阐述当列表包含子列表时,浅拷贝仅复制引用导致子对象联动修改,而深拷贝则完全独立复制子对象。掌握这些机制有助于避免数据意外变更,提升代码安全性与逻辑清晰度。

一、前言

在Python编程中,列表的复制操作并非单一模式,而是根据需求分为几种不同的实现路径:

  • 直接赋值
  • 浅复制
  • 深复制

接下来,我们将通过具体的代码实例,逐一剖析这几种复制方式在内存管理和数据变更上的具体区别。

二、直接赋值


a = [11, 22, 33]
b = a
print(id(a), id(b))
b[0]=1
print(a,b)

观察输出结果可知,变量a和b的内存地址完全一致。这表明直接赋值并未创建新对象,b仅仅是对a的引用。因此,当通过b修改列表内容时,原始列表a的内容也会同步发生更改。

三、用切片赋值


a = [11, 22, 33]
b = a[:]
print(id(a), id(b))
b[0]=1
print(a,b)

查看输出结果,a与b的内存地址已不相同。此时,通过b对列表进行的任何修改都不会影响原始列表a。这说明切片操作创建了一个全新的列表对象。

四、copy()复制实现赋值


a = [11, 22, 33]
b = copy.copy(a)
print(id(a), id(b))
b[0]=1
print(a,b)

运行结果如下所示,

可以看到a和b的内存地址不同。通过b修改列表值时,a保持不变。这证实了copy()方法创建的浅拷贝在顶层列表操作上与切片方式功能一致,均能隔离顶层数据的修改。

五、deepcopy()复制实现赋值


a = [11, 22, 33]
b = copy.deepcopy(a)
print(id(a), id(b))
b[0]=1
print(a,b)

输出结果如下所示,在此特定实例中,deepcopy()的行为表现与copy()并无二致。

那么,浅复制和深复制在何种场景下会产生本质区别呢?请继续参考下方的对比测试实例。

六、copy()和deepcopy()的区别

6.1 copy()


a = [11, 22, 33, [1,2]]
b = copy.copy(a)
print(id(a), id(b))
b[3][0]=11
print(a,b)

运行结果:

6.2 deepcopy()


a = [11, 22, 33, [1,2]]
b = copy.deepcopy(a)
print(id(a), id(b))
b[3][0]=11
print(a,b)

运行结果:

通过上述测试可以明确,当列表a的元素中包含子列表时:

copy()方法执行的是浅复制,它不会递归复制子对象,仅复制子对象的引用。因此,当原始数据中的子对象发生改变时,浅拷贝生成的列表中的子对象也会随之改变;而deepcopy()方法则执行深复制,它会递归地复制对象内部的所有子对象。这意味着,即使原始对象发生修改,深复制生成的列表中的任何子元素都不会受到影响,两者完全独立。

至此,关于Python列表复制机制的详解已介绍完毕。如需了解更多Python列表相关操作,欢迎查阅本站往期文章或继续浏览后续内容。感谢大家的支持!

相关标签:

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

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 算法库。