python 使用[[v]*n]*m遇到的问题

需求:想通过python生成m行n列的矩阵

方式1:(有问题)

data = [[0]*3]*4   #4行3列
data

  输出

[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

  修改data[0][0]元素的值

data[0][0] = 1
data

  输出

[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]

  哇,是不是对结果很迷,为啥改变一个值会对列为0的所有元素改变呢?

解析:我们可以看下他们对应的内存指向地址

问题出在这里了。

方式2:

#输入
data1 = [[0 for i in range(3)] for j in range(4)]
data1

# 输出
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]


#输入
data1[0][0] = 1
data1

#输出
[[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

  

猜你喜欢

转载自www.cnblogs.com/ivyharding/p/11402291.html
今日推荐