我对Python很陌生,但这很奇怪。 所以,我有一个矩阵(列表列表),我把它传递给一个函数(creaMatrixVNS)。
def creaMatrixVNS(best_matrice, time):
matrice = best_matrice
sol_init_ass = assegnamento(matrice)
iteration = 1 #numero swap
counter = 0 #numero iterazioni
while True:
temp = matrice
从这一点
for x in xrange(0,iteration):
temp = swap(temp, sol_init_ass)
到目前为止,我看到我的变量matrice
发生了变化并被设置为temp的值。而且我不知道为什么。这是该功能的第二部分。
time2 = creaSoluzione(temp)
if time2 < time:
time = time2
matrice = temp
if counter == 9:
break
else:
counter += 1
else:
if iteration < 3:
iteration += 1
counter = 0
else:
break
print(time)
return matrice
其他功能:
def swap(matriceInput, lista):
result = matriceInput
i1, j1 = giveMeAcouple(lista)
i2, j2 = giveMeAcouple(lista)
while i1 == i2 and j1 == j2:
i1, j1 = giveMeAcouple(lista)
i2, j2 = giveMeAcouple(lista)
result[i1][j1], result[i2][j2] = result[i2][j2], result[i1][j1]
return result
def giveMeAcouple(sol_init_ass):
j1 = randint(0,len(sol_init_ass)-1)
while len(sol_init_ass[j1]) <= 0:
j1 = randint(0,len(sol_init_ass)-1)
i1 = randint(0,len(sol_init_ass[j1]) - 1)
return sol_init_ass[j1][i1], j1
def assegnamento(matrice):
listElementi = []
temp = []
n = len(matrice)
m = len(matrice[0])
for i in xrange(0,m): #Per ogni colonna
for j in xrange(0,n): #Per ogni riga
if matrice[j][i] != 0:
temp.append(j)
listElementi.append(temp)
temp = []
return listElementi
def creaSoluzione(matrix):
n = len(matrix)
m = len(matrix[0])
max = 0
for j in xrange(0,m):
temp = 0
for i in xrange(0,n):
temp += matrix[i][j]
#print(temp)
if temp > max:
max = temp
return max
任何提示?感谢
答案 0 :(得分:2)
执行matrice = best_matrice
时,您只需创建一个名为matrice
的新引用,该引用指向与引用best_matrice
相同的对象。
查看Deep copy a list in Python的已接受答案,以获取Python中列表深层副本的示例。
答案 1 :(得分:-1)
在不导入的情况下“深入”复制列表的快速简写是使用:
切片运算符。在您的情况下,您需要使用它两次来显式复制列表及其内容,而不是复制对内部列表的引用。
一个简单的例子是new_lst = old_lst[:]
来复制old_lst
的所有内容 - 在你的情况下,你想做matrice = best_matrice[:][:]
,从而复制内部列表的内容。