我找不到任何与我的问题相符的内容,所以希望这在某处并没有被提及过,而且我找到它太愚蠢了。
thelist = []
a = [0]
for i in range(5):
thelist.append(a)
print(thelist)
此时,程序返回[[0],[0],[0],[0],[0]]
thelist[0].append(1)
print(thelist)
在追加这个之后我会期望它返回相同的但是修改了第一个元素,如下所示:
[[0, 1], [0], [0], [0], [0]]
实际发生的是,每个元素都以相同的方式被修改,我得到了以下内容。
[[0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]
我发现,如果我将第2行中的a替换为a的值,一切正常。但是,当我多次附加一个变量时,为什么这不起作用?
答案 0 :(得分:0)
创建列表时,它会在每个位置保存对同一对象(a)的引用。当您附加到第一个元素时,它实际上附加到所有" thelist"插槽。您需要做的是在构造期间对对象进行深层复制:
thelist = []
a = [0]
for i in range(5):
thelist.append(list(a))
print(thelist)
然后,以下附加内容将按预期工作。
答案 1 :(得分:0)
thelist
和a
都是列表。因此,在for循环中,您将列表附加到另一个列表
案例1:a是一个列表
thelist = []
a = [0]
for i in range(5):
thelist.append(a)
print(thelist)
[[0], [0], [0], [0], [0]]
案例2:a不是列表而是变量
thelist = []
a = 0
for i in range(5):
thelist.append(a)
print(thelist)
[0, 0, 0, 0, 0]
答案 2 :(得分:0)
a是列表中每个项目都指向的对象。
如果希望列表中的每个项目都是不同的对象(具有相同的值),则应在分配之前创建新对象。最简单的方法是:
for i in range(5):
thelist.append(list(a))
list函数接收一个列表并返回一个具有相同内部值的新实例。所以你不会每次都改变整个阵列。