为何修改Python中从其他变量赋值的列表会改变原变量?
Python列表赋值后同步修改的原因解析
代码示例
a = 'donkey' b = 'horse' c = [a, b] d = c print(c) print(d) d[0] = 'panda' print(c) print(d)
输出结果
['donkey', 'horse'] ['donkey', 'horse'] ['panda', 'horse'] ['panda', 'horse']
原因说明
这是Python对可变对象的引用机制导致的,属于Python的有意设计:
- 列表(list)是Python中的可变对象,当执行
d = c时,并没有创建新的列表,只是让变量d和c同时指向内存中同一个列表对象。 - 后续通过
d[0] = 'panda'修改的是这个共享的列表对象本身,所以不管用c还是d访问,看到的都是修改后的结果。
如何让d成为独立副本
如果需要让d拥有和c相同的内容但互不影响,可以使用以下方法:
- 切片复制:
d = c[:] - 用
list()构造函数:d = list(c) - 使用
copy模块:import copy; d = copy.copy(c)
内容的提问来源于stack exchange,提问作者User 23415
相关产品推荐
相关产品推荐

