变量值的修改

我们先来看一段程序

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', '', ''], ['', '', ''], ['', '', '']]
原文地址:https://www.cnblogs.com/shangwei/p/13845366.html