|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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]
复制代码 |
|