需要在程序中使用二維數組,網上找到一種這樣的用法:
1
2
3
4
5
6
|
#創建一個寬度爲3,高度爲4的數組 #[[0,0,0],
#
[0,0,0], #
[0,0,0], #
[0,0,0]] myList
= [[ 0 ]
* 3 ]
* 4 |
但是當操作myList[0][1] = 1時,發現整個第二列都被賦值,變成
[[0,1,0],
[0,1,0],
[0,1,0],
[0,1,0]]
爲什麼...一時搞不懂,後面翻閱The Python Standard Library 找到答案
list * n—>n shallow copies of list concatenated, n個list的淺拷貝的連接
例:
1
2
3
4
5
6
|
>>>
lists = [[]]
* 3 >>>
lists [[],
[], []] >>>
lists[ 0 ].append( 3 ) >>>
lists [[ 3 ],
[ 3 ],
[ 3 ]] |
[[]]是一個含有一個空列表元素的列表,所以[[]]*3表示3個指向這個空列表元素的引用,修改任何
一個元素都會改變整個列表:
所以需要用另外一種方式進行創建多維數組,以免淺拷貝:
1
2
3
4
5
6
|
>>>
lists = [[]
for i
in range ( 3 )] >>>
lists[ 0 ].append( 3 ) >>>
lists[ 1 ].append( 5 ) >>>
lists[ 2 ].append( 7 ) >>>
lists [[ 3 ],
[ 5 ],
[ 7 ]] |
之前的二維數組創建方式爲:
1
|
myList
= [([ 0 ]
* 3 )
for i
in range ( 4 )] |