Python列表赋值与切片复制的区别详解

Jasper
Jasper
发布时间:2026-10-13| 6人浏览过
原创

本文详解Python中创建列表副本的正确方法。指出直接赋值会导致两个变量指向同一内存地址,修改其中一个会影响另一个。通过对比赋值与切片操作(squares[:])的代码示例,展示如何生成独立的列表副本,确保数据隔离。

Python列表赋值与切片复制的区别详解

在Python编程中,若需创建一个列表的完整副本,应当采用切片操作进行复制。这种方式能够确保生成两个完全独立的列表对象,互不干扰。

需要特别注意,切勿直接将原列表赋值给新变量。这种操作无法生成两个独立的列表,而是让新变量引用原列表的内存地址,导致两者指向同一数据源。

使用赋值语法创建列表副本的问题

1、使用赋值语法创建列表副本的问题

接下来通过代码演示列表赋值操作,验证其是否生成了独立的列表结构。


squares = list(range(1, 11))
 
print('squares原始值为:', end='')
print(squares)
 
# 使用列表赋值
numbers_squares = squares
print('numbers_squares所有元素为:', end='')
print(numbers_squares)
 
# 为squares列表添加数字100
squares.append(100)
print('添加数字后的squares值:', end='')
print(squares)
 
# 为squares列表添加数字200
numbers_squares.append(200)
print('添加数字后的number_squares值:', end='')
print(numbers_squares)

程序运行输出结果如下:


squares原始值为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers_squares所有元素为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
添加数字后的squares值:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]
添加数字后的number_squares值:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 200]

从输出结果可见,number_squares列表中也包含了数字100。这表明简单的赋值操作并未形成两个独立的列表。实际上,赋值语句仅使Python中的新变量number_squares关联到原列表squares所指向的内存对象,因此这两个变量最终指向的是同一个列表实例。

列表副本正确方法:使用切片复制列表副本

2、列表副本正确方法:使用切片复制列表副本

下面的示例中,首先创建一个包含1到10数字的列表,随后利用切片操作复制该列表,从而生成两个相互独立的列表对象。


squares = list(range(1, 11))
 
print('squares原始值为:', end=' ')
print(squares)
 
# 使用切片复制squares列表
numbers_squares = squares[:]
print('numbers_squares所有元素为:', end=' ')
print(numbers_squares)

初始状态下的输出结果为:


squares原始值为: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers_squares所有元素为: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

为了进一步验证两个列表确实相互独立,我们在每个列表中分别添加不同的数字,并检查每个列表是否准确记录了各自添加的数字。


squares = list(range(1, 11))
 
print('squares原始值为:', end='')
print(squares)
 
# 使用切片复制squares列表
numbers_squares = squares[:]
print('numbers_squares所有元素为:', end='')
print(numbers_squares)
 
# 为squares列表添加数字100
squares.append(100)
print('添加数字后的squares值:', end='')
print(squares)
 
# 为squares列表添加数字200
numbers_squares.append(200)
print('添加数字后的number_squares值:', end='')
print(numbers_squares)

添加数字后的输出结果如下:


squares原始值为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
numbers_squares所有元素为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
添加数字后的squares值:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]
添加数字后的number_squares值:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 200]

结果显示,数字100仅被添加到了squares列表中,而数字200仅被添加到了numbers_squares列表中。这证实了通过切片操作确实创建了两个独立的列表,彼此修改互不影响。

以上关于解决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 算法库。