Python列表append同一对象后修改元素引发联动问题咨询
列表中子列表修改同步的原因分析
问题场景
向列表中添加多个子列表后,修改其中一个子列表的值,所有子列表都会跟着变化。
代码示例
data=[] def data_extend(multiples): a=["NV"]*2 for i in range(multiples): data.append(a) data_extend(2) print(data) data[0][1]=5 print(data)
实际输出
[['NV', 'NV'], ['NV', 'NV']] [['NV', 5], ['NV', 5]]
预期输出
[['NV', 'NV'], ['NV', 'NV']] [['NV', 5], ['NV', 'NV']]
原因解析
核心问题是你在循环里反复添加的是同一个列表对象的引用:
- 执行
a=["NV"]*2时,内存中生成了一个唯一的列表对象a; - 循环里的
data.append(a)并没有创建新的列表,只是把这个a的内存地址重复存入data; data里的两个元素本质指向同一个列表,修改其中任意一个,都是在操作内存中那个唯一的列表对象,所以所有子列表看起来会同步变化。
内容的提问来源于stack exchange,提问作者Spynx
相关产品推荐
相关产品推荐

