問題はstate
変数(args)に起因します。それは私のコードで変更されています(new_state
変更後)。ただし、使用することでこの種の問題を防ぐことができることを読みました(同じようにlist()
見え、同じ参照があります)。state
new_state
要約すると、関数の先頭と戻りの直前に状態の値を表示すると、値が異なります(そして、明らかにこの変数の値を変更したくありません!)。どうすればこの問題を解決できますか?
def successor(self, state, numberClients, numberDepots, Q, dist_table):
succ_list = list()
for i in range(0, len(state)):
for j in range(0, len(state[i])):
switchIndex = 0
while switchIndex < length:
permutationIndex = 0
while permutationIndex < len(state[switchIndex]):
new_state = list(state)
temp = new_state[switchIndex][permutationIndex]
new_state[switchIndex][permutationIndex] = new_state[i][j]
new_state[i][j] = temp
if checkConst(new_state): # accept only in some cases (we don't care here)
succ_list.append(('act', new_state))
permutationIndex += 1
switchIndex += 1
return succ_list