Python将列表追加到列表后,原列表修改时已追加内容同步变更问题
问题原因
这是Python可变对象的引用传递特性导致的:
- 列表属于可变对象,你传递
arr参数、执行lista_input.append(arr)时,实际存入的是列表的内存引用,而非列表内容的独立副本。 - 你的代码全程只创建了一个列表实例(就是主函数中初始化的
inputs),所有存入lista_input的元素都指向同一个内存地址。递归过程中修改arr[i]的操作,本质是修改这唯一的列表实例的内容,所有指向它的引用都会同步更新,最终所有元素都显示为最后一次修改后的结果[1,1]。
修复方法
只需要在把arr存入lista_input时,创建一份内容副本即可,将原代码中的:
lista_input.append(arr)
修改为任意一种拷贝写法即可:
# 写法1:用列表内置copy方法 lista_input.append(arr.copy()) # 写法2:用切片实现拷贝 lista_input.append(arr[:]) # 写法3:用list构造函数生成新列表 lista_input.append(list(arr))
修改后运行程序,输出就会是预期的[[0, 0], [0, 1], [1, 0], [1, 1]]。
内容的提问来源于stack exchange,提问作者huecraft341
相关产品推荐
相关产品推荐

