需要在程序中使用二維數組,網上找到一種這樣的用法:
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時,發現整個第二列都被賦值,變成
1
2
3
4
5
6
7
|
[[ 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 )] |