1. 列表乘法生成m*n 阶数组
dparray= [[0] * n] * m
2.for循环法生成m*n 阶数组
dparray= [[0 for _ in range(n)] for _ in range(m )]
3.乘法与for循环结合生成m*n 阶数组
dp = [[0] * n for _ in range(m )]
执行测试脚本:
dp1 = [[0] * n] * m
dp2 = [[0 for _ in range(n)] for _ in range(m )]
dp3 = [[0] * n for _ in range(m)]
if dp1 == dp2 == dp3 :
print('dp1 == dp2 == dp3 is',True)
dp1[1][1] = 1
dp2[1][1] = 1
dp3[1][1] = 1
####
if dp1 == dp2 :
print('修改 dp[1][1]之后 :dp1 == dp2 is ',True)
else:
print('\n修改 dp[1][1]之后 :dp1 == dp2 is ',False)
print(dp1)
print(dp2)
if dp2 == dp3:
print('\n修改 dp[1][1]之后 :dp2 == dp3 is ',True)
print(dp2)
print(dp3)
执行脚本输出结果:
dp1 == dp2 == dp3 is True
修改 dp[1][1]= 1之后 :dp1 == dp2 is False
[[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]
[[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0]]
修改 dp[1][1]= 1之后 :dp2 == dp3 is True
[[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0]]
[[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0]]
结论:[[0] * n] * m生成的数组 和 for循环生成的数组存在本质区别,在使用过程,替换某一位置数值的时候就会产生异常。