python-构造二维数组的坑与正确方法
问题:
刷题的时候发现了这个问题
n = 3
res = n * [n * [0]]
print("res=", res)
res[0][1] = 9
print("res2=", res)
输出
res= [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
res2= [[0, 9, 0], [0, 9, 0], [0, 9, 0]]
这完全不符合常理啊,我一度怀疑我自己。。。
原因:
由于n*[0]
的结果是生成了指向n个指向[0]的指针,这意味着改变任意一个,其他都会跟着变。
解决:
列表生成式
讲解在这里
res = [[0 for _ in range(n)] for _ in range(n)]
学到了,学到了