记录向,如题:
a = [1,2,3]
array = [a]*3
print(array)
输出:[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
a[0]=-1
print(array)
输出:[[-1, 2, 3], [-1, 2, 3], [-1, 2, 3]]
可以看出array[0]到array[2]和a指向了同一个对象(这里借用c指针的概念,可能不是很恰当)。
当改变a指向对象的值时,array的输出结果当然会变。
array[0] = [1]
print(array)
输出:[[1], [-1, 2, 3], [-1, 2, 3]]
array[0]本身可以视为一个变量名(或者不恰当的说,像C里的指针),当付给它新的值的时候,它将指向新的对象
综上,当需要创建一个5*5的二维列表的时候,如果采用:
array = [[0]*5]*5
当采用array[i][j]改变array[i]中的一个元素,array的其他元素也会跟着变,因为*5的本质是复制了对象的地址(或者是指针),也就是说这样会使array的5个元素指向同一个list对象。正确的做法是用for循环。