我正在尝试实施某种本地搜索。为此我有两个数组,代表一个列表,我正在尝试优化。 所以我有一个阵列作为当前最好的阵列和我目前正在分析的阵列。
一开始我正在改组数组并将当前最佳数组设置为混洗数组。
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
"指数"作为参数赋予函数,它只是随机生成的数字。
我想我做错了分配变量,但我无法弄清楚是什么。那么我该怎么办才能将数组的值分配给另一个数组,而不是让它对它应用相同的更改呢?
答案 0 :(得分:2)
当您使用self.bestMatchOrder = self.matchOrder
时,Python不会为self.bestMatchOrder
分配新的内存位置,而是指向同一内存位置。并且知道列表是可变数据类型的事实,因此self.matchOrder
中所做的任何更改都会反映在self.bestMatchOrder
中。
import copy
self.bestMatchOrder = copy.deepcopy(self.matchOrder)
但是,如果您使用线性列表或简单列表,您也可以使用self.bestMatchOrder = self.matchOrder[:]
但如果您使用嵌套列表,则deepcopy()
是正确的选择。
答案 1 :(得分:0)
如果要复制列表,可以使用切片操作:
list_a = [1, 2, 3]
list_b = list_a[:]
list_a = [0, 0, 42]
print list_a # returns [0, 0, 42]
print list_b # returns [1, 2, 3], i.e. copied values
但是如果你有更复杂的结构,你应该使用deepcopy
,如上面建议的@anmol_uppal。