范围更改时,列表也会更改

时间:2020-03-20 04:41:31

标签: python list

当我在for循环中附加列表时,它会正确更改其值 当我在循环外打印时,它的值会改变

arr=[]
b=[1,2,3,4,5,6,7]
for i in range(0,len(b)):
 b[i]=0
 arr.append(b)
 print(arr[i])

这里的输出是

 [0, 2, 3, 4, 5, 6, 7]
 [0, 0, 3, 4, 5, 6, 7]
 [0, 0, 0, 4, 5, 6, 7]
 [0, 0, 0, 0, 5, 6, 7]
 [0, 0, 0, 0, 0, 6, 7]
 [0, 0, 0, 0, 0, 0, 7]
 [0, 0, 0, 0, 0, 0, 0]

还有

arr=[]
b=[1,2,3,4,5,6,7]
for i in range(0,len(b)):
 b[i]=0
 arr.append(b)
print(arr)  

输出为

[[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]

1 个答案:

答案 0 :(得分:2)

在每次迭代中,您都向b中添加了对同一列表arr的引用,这意味着当您以后将新值设置为零时,您将修改{ {1}}同时进行。为避免这种情况,您可以将arr的副本附加到b上,而不要使用arr,即:

list(b)

这将输出:

arr = []
b = [1, 2, 3, 4, 5, 6, 7]
for i in range(len(b)):
   b[i] = 0
   arr.append(list(b))
print(arr)