1. 如果我们要构造一个m * n的全零矩阵,以list构造出来的应当是这样:
m = 4
n = 3
zeros = [[0 for _ in range(n)] for _ in range(m)]
如果我们要修改其中的一个值:
zeros[0][0] = 1
那么我们可以得到相应matrix的结果:
然而,我们还有另外一种矩阵构造方式:
zeros2 = [[0] * n] * m
并且Python告诉我们:
但是,如果我们进行如下修改:
zeros2[0][0] = 1
我们会发现:
zeros2的第一列全都变成1了!
这是因为,list的 * 运算其实是一种浅拷贝的机制。当我们进行 [obj] * n这样的构造时,Python只会把同一个obj的引用copy共n次,然后展开成一个数组。所以如果我们把数组中的某一个元素进行修改,那么数据中的其他元素(实际上都是一个元素)也会改变!