我正在尝试实施某种本地搜索。为此,我有两个数组,它们代表一个列表,我正在尝试对其进行优化。因此,我有一个阵列作为当前最好的阵列,而我正在分析一个阵列。
一开始,我将对数组进行混洗,并将当前的最佳数组设置为混洗后的数组。
random.shuffle(self.matchOrder)
self.bestMatchOrder = self.matchOrder
然后,我在阵列中交换了一个随机的邻居对。现在的问题是,当我交换中的值时self.matchOrder
,将交换中的值self.bestMatchOrder
。
a = self.matchOrder[index]
self.matchOrder[index] = self.matchOrder[index + 1]
self.matchOrder[index + 1] = a
“索引”作为参数提供给函数,它只是随机生成的数字。
我猜我在分配变量时做错了,但我不知道是什么。那么,我该怎么做才能仅将数组的值分配给另一个数组,而不使它也应用相同的更改呢?
当您使用self.bestMatchOrder = self.matchOrder
Then Python时,它们不会分配新的内存位置,self.bestMatchOrder
而是都指向相同的内存位置。并且知道列表是可变数据类型这一事实,因此对所做的任何更改都self.matchOrder
将反映在中self.bestMatchOrder
。
import copy
self.bestMatchOrder = copy.deepcopy(self.matchOrder)
但是,如果使用线性列表或简单列表,也可以使用。self.bestMatchOrder = self.matchOrder[:]
但是如果您使用的是嵌套列表,则deepcopy()
是正确的选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句