直接举例子:
ss = [['a'] * 3] * 3
ss[1][1] = 'b'
print(ss)
ss[0][1] = 'b'
print(ss)
ss[2][1] = 'b'
print(ss)
三个print的结果都是:
如果你在构建二维数组的时候使用list的乘法,就会出错。
根本原因是,只要你改动了ss[<任意>][0]
,他都会将整列进行修改。所有的行都是相同的复制。都指向同一片内存。
使用函数 id(object)->int
可以查看对应十进制的内存地址。
如果你使用numpy的话,将其转换为numpy的array格式,就ok没问题。
np.array(ss)
最好的方法还是,当我们生成list二维数组的时候,使用如下方法:
ss = [['a'] * 3 for _ in range(3)]
查看内存: