Python将值从一个变量赋值给另一个变量

时间:2015-05-16 09:45:20

标签: python arrays variables

我正在尝试实施某种本地搜索。为此我有两个数组,代表一个列表,我正在尝试优化。 所以我有一个阵列作为当前最好的阵列和我目前正在分析的阵列。

一开始我正在改组数组并将当前最佳数组设置为混洗数组。

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

"指数"作为参数赋予函数,它只是随机生成的数字。

我想我做错了分配变量,但我无法弄清楚是什么。那么我该怎么办才能将数组的值分配给另一个数组,而不是让它对它应用相同的更改呢?

2 个答案:

答案 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。