鱼C论坛

 找回密码
 立即注册
查看: 2399|回复: 0

[技术交流] Python FAQ 018 列表无缘无故变了

[复制链接]
发表于 2020-3-5 13:29:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Python FAQ 018 列表无缘无故变了


问题

我想让列表 a 改变,为什么列表 b 无缘无故变了 ?
>>> a = [1, 2, 3]
>>> b = a
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b    # 为什么 b 也变了?不明白
[1, 2, 3, 4]

解答

问题出在 b = a 这一句上。

给变量赋值就好比贴标签。a 标签贴在了列表 [1, 2, 3] 上,b = a 相当于把 b 标签贴在了和 a 一样的列表。

这时 b 和 a 指向的都是同一个列表 [1, 2, 3],它们的内存地址都一样:
>>> id(a)    # id() 函数用于查看变量的内存地址
1775624591424
>>> id(b)
1775624591424

所以要想 a 和 b 两个标签 “分道扬镳”,需要将 a 指向的列表拷贝一份给 b,像这样:
>>> a = [1, 2, 3]
>>> b = a[:]    # 拷贝列表

这样 a 和 b 就没有关系了(内存地址不同):
>>> id(a)
1638823234944
>>> id(b)
1638829077504

再试一遍,不会出现上面问题的情况了:
>>> a = [1, 2, 3]
>>> b = a[:]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3]

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 17:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表