python 二維列表(陣列)賦值問題
阿新 • • 發佈:2018-12-09
當我們使用arr = [[0]*5]*5 初始化一個二維陣列時,會得到一個5*5的陣列,
In [1]: arr = [[0]*5]*5
In [2]: arr
Out[2]:
[[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
然後對這個二維陣列某個元素進行賦值,會發現整列都會被賦值,
In [3]: arr[0][0] = 1
In [4]: arr
Out[4]:
[[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0]]
這是因為 [[0]*5]*5
換一種初始化方式可以解決這個問題,
In [1]: arr = [[0]*5 for _ in range(5)]
In [2]: arr
Out[2]:
[[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
In [3]: arr[0][0] = 1
In [4]: arr
Out[4]:
[[1, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]