网站首页 > 技术文章 正文
在使用python的列表时,必须要认识到列表引用与列表副本的区别,否则,很容易导致结果出错。首先,让我们来看看下面的2个例子的情况。
a = [1, 2, 3]
b = [4, 5]
a.append(b)
b.extend([6])
print(a)
上面的输出结果是[1, 2, 3, [4, 5, 6]],不是我们认为的[1, 2, 3, [4, 5]]。这是因为:使用 a.append(b) 将列表 b 作为一个元素添加到列表 a 中。此时,a 变为 [1, 2, 3, [4, 5]]。注意,这里 a 的最后一个元素是指向 b 的引用。
然后,使用 b.extend([6]) 将元素 6 添加到列表 b 中。因为之前 a 的最后一个元素是对 b 的引用,所以这个改变也会影响到 a 的内容。因此,b 变为 [4, 5, 6],同时 a 最后一个元素也随之更新为 [4, 5, 6]。最后,输出列表 a,得到的结果是 [1, 2, 3, [4, 5, 6]]。
这种情况下,对 b 的任何修改都会反映在 a 中,因为它包含的是 b 列表的引用而不是其副本。
那么,我们再看看下面的例子:
a = [1, 2, 3]
b = [4, 5]
a.append(b.copy())
b.extend([6])
print(a)
这里的输出结果是[1, 2, 3, [4, 5]],不是[1, 2, 3, [4, 5, 6]]。这是因为:列表a中的最后一个元素是列表b的一个副本,不是列表b的引用。所以,后面b的改变不会影响到列表a的最后一个元素,此时最后一个元素只是一个拷贝或副本(与列表b的内容一样但存储空间地址不一样),不再指向列表b的存储空间地址,所以列表b的存储空间的内容的变化不再影响列表a的最后一个元素。
上面的情况,与下面这个例子也是同样的道理:
lb = [1,2]
def fm(lt):
lt.append(3)
fm(lb)
print(lb)
输出结果是[1,2,3],不是[1,2]。这是因为:
函数fm()将lb作为参数传递时,传递的是lb的引用或者说是存储空间的地址,函数fm的形参lt接收的是lb的引用或地址,然后lt新增一个值,就是lt指向的地址内容新增1个值,而lt指向的引用或地址就是lb,也就是lb和lt都是指向同一个引用或同一个地址,lt的变化也就是lb的变化。
示意图如下所示:
猜你喜欢
- 2025-03-26 少儿python编程:找出100以内能被3整除的数
- 2025-03-26 python3从零学习-5.2.1、日历相关模块calendar
- 2025-03-26 Python实现3×3矩阵主对角线元素求和
- 2025-03-26 Python3+requests+unittest接口自动化测试实战
- 2025-03-26 深入理解Python3密码学:详解PyCrypto库加密、解密与数字签名
- 2025-03-26 只用3行Python代码,获取星期几?(python输入星期几的第一个字母判断星期几)
- 2025-03-26 Python3.11版本使用thriftpy2的问题
- 2025-03-26 在Python中有四种方法可以交换两个变量的值,你用过几种?
- 2025-03-26 《Python3官方手册中文版》高清PDF免费下载!内容简直如开挂
- 2025-03-26 Python实现轻量级数据库引擎——用200行代码复刻SQLite3核心功能
- 265℃Python短文,Python中的嵌套条件语句(六)
- 264℃python笔记:for循环嵌套。end=""的作用,图形打印
- 263℃PythonNet:实现Python与.Net代码相互调用!
- 257℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 257℃Python实现字符串小写转大写并写入文件
- 117℃原来2025是完美的平方年,一起探索六种平方的算吧
- 97℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 90℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
-
- 金母鸡量化教学场:pandas—数据挖掘的Python库
- 分享一个用于商业决策数据挖掘的python案例
- Python图像识别实战(二):批量图像读取和像素转换(附源码)
- 从小白到大神,这10个超实用的 Python 编程技巧不可少
- 太震撼!527页战略级Python机器学习实战,实用度碾压群书!附PDF
- 一篇文章带你解析Python进程(一篇文章带你解析python进程怎么写)
- 大数据分析师如何进行数据挖掘?大数据分析师丨 2025 年报考攻略
- UG编程第34节:浅谈机床坐标系(ug编程机床坐标系细节)
- 想入门Python?先狠下心来死磕这7个方向
- Python大屏看板最全教程之Pyecharts图表
- 标签列表
-
- 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)