变量值的修改
我们先来看一段程序
sublist = [""] * 3
# ['', '', ''] matrix = [sublist] * 3
# [['', '', ''], ['', '', ''], ['', '', '']]
matrix[0][0] # “”
matrix[0][0] = "X" # ['X', '', ''] # [['X', '', ''], ['X', '', ''], ['X', '', '']]
上图程序中,我们创建了一个二维矩阵matrix,只是想去修改matrix【0】【0】元素,但是结果却是第一行全部被修改了。这是什么原因呢,如下图所示:
当我们利用乘法的形式来创建matrix时,matrix[0]、matrix[1]和matrix[2]都指向了sublist的地址。所以当我们修改matrix[0]时,matrix[1]和matrix[2]的值也对应着改变。
print(id(sublist)) # 1872834323656 print(id(matrix[0])) # 1872834323656 print(id(matrix[1])) # 1872834323656 print(id(matrix[2])) # 1872834323656
我们可以通过下述的程序进行修改
matrix = [[""] * 3 for _ in range(3)] # [['', '', ''], ['', '', ''], ['', '', '']]
matrix[0][0] = "X" # [['X', '', ''], ['', '', ''], ['', '', '']]