繁体   English   中英

Python将值从一个变量分配给另一个

[英]Python Assigning value from one variable to another

我正在尝试实施某种本地搜索。 为此,我有两个数组,它们代表一个列表,我正在尝试对其进行优化。 因此,我有一个阵列作为当前最好的阵列,而我正在分析一个阵列。

一开始,我将对数组进行混洗,并将当前的最佳数组设置为混洗后的数组。

random.shuffle(self.matchOrder)
self.bestMatchOrder = self.matchOrder

然后,我在阵列中交换了一个随机的邻居对。 现在的问题是,当我交换self.matchOrder中的值时, self.bestMatchOrder的值self.bestMatchOrder被交换。

a = self.matchOrder[index]
self.matchOrder[index] = self.matchOrder[index + 1]
self.matchOrder[index + 1] = a

“索引”作为参数提供给函数,它只是随机生成的数字。

我猜我在分配变量时做错了,但我不知道是什么。 因此,我该怎么做才能仅将数组的值分配给另一个数组,而不使它也应用相同的更改?

当您使用self.bestMatchOrder = self.matchOrder ,Python不会为self.bestMatchOrder分配新的内存位置,而是都指向相同的内存位置。 并且知道列表是可变数据类型这一事实,因此,对self.matchOrder所做的任何更改都将反映在self.bestMatchOrder

import copy

self.bestMatchOrder = copy.deepcopy(self.matchOrder)

但是,如果您使用线性列表或简单列表,则也可以使用self.bestMatchOrder = self.matchOrder[:]但是,如果您使用的是嵌套列表,则deepcopy()是正确的选择。

如果要复制列表,可以使用切片操作:

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所建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM