Python .append()方法行为异常,添加的列表元素全部重复如何解决
问题根因
这个现象是Python可变对象的引用传递特性导致的:列表属于可变对象,你直接append(x)时,实际是往列表中添加了x的内存引用,而非x当前的值拷贝。循环中每次修改x[0]都是修改同一个内存地址的内容,最终所有添加的引用都指向最后一次修改后的x值,因此全是[5,0]。
解决方案
只需在append时创建x的浅拷贝即可,不需要拆分x的元素,完全保留x的列表类型,有三种常用实现方式:
- 方法1:使用列表切片拷贝
# 注意不要用list做变量名,会覆盖Python内置的list类型,此处改为my_list my_list = [[0,0]] x = [0,0] for i in range(5): x[0] += 1 my_list.append(x[:])
- 方法2:使用
list()构造函数拷贝
只需修改append行代码即可:
my_list.append(list(x))
- 方法3:使用
copy模块的浅拷贝方法
import copy my_list.append(copy.copy(x))
以上三种方式运行后,取my_list[1:]即可得到你预期的[[1,0],[2,0],[3,0],[4,0],[5,0]]结果。
内容的提问来源于stack exchange,提问作者Harmanation Builds
相关产品推荐
相关产品推荐

