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