为什么会这样?两种方法应该给出相同的结果,但它们不会:
a_good=[[0,0],[0,0]]
for i in [0,1]:
for j in [0,1]:
a_good[i][j]=str(i)+str(j) #[['00','01'],['10','11']]
a_error=[[0]*2]*2
for i in [0,1]:
for j in [0,1]:
a_error[i][j]=str(i)+str(j) #[['10','11'],['10','11']] !?
答案 0 :(得分:1)
在第二个中,a_error [0]和a_error [1]是对同一列表的引用。因此,当您更新存储在a_error [0]中的值时,您正在更新存储在a_error中的值[1]
a_error=[[0]*2]*2
for i in [0,1]:
print(a_error)
for j in [0,1]:
a_error[i][j]=str(i)+str(j) #[['10','11'],['10','11']]
print(a_error)
# [[0, 0], [0, 0]]
# [['00', '01'], ['00', '01']] # before i=1
# [['10', '11'], ['10', '11']] # after i=1