|  | 
 
| 
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]
 | 
 |