提示コードでは、リストA
に追加された各要素は同じモノを指してしまいます。
copy.deepcopy
を使うことで別要素として追加できます。
参考:Python のリストの扱いで注意すること
Python
1arr = [[0 for i in range(3)] for j in range(5)]
2A = []
3for i in range(0,2):
4 arr[1][2] += 1
5 A.append(arr)
6
7for a in A:
8 print(id(a),a)
9# 1624873441544 [[0, 0, 0], [0, 0, 2], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
10# 1624873441544 [[0, 0, 0], [0, 0, 2], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
11
12import copy
13print('deepcopy')
14arr = [[0 for i in range(3)] for j in range(5)]
15A = []
16for i in range(0,2):
17 arr[1][2] += 1
18 A.append(copy.deepcopy(arr))
19
20for a in A:
21 print(id(a),a)
22# 1624873442056 [[0, 0, 0], [0, 0, 1], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
23# 1624873514440 [[0, 0, 0], [0, 0, 2], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/25 08:58
2017/11/25 12:10