我创建了类Sorter
,该类将self.list
中的变量__init__
设置为等于给定参数。然后,我创建了一个函数selectionSort
,该函数应将self.list
的值复制到新变量unsortedList
中。可以解决,但是当我然后更改unsortedList
时,self.list
变量也会更改。
这是我的代码:
class Sorter:
def __init__(self, list):
self.list = list
def selectionSort(self):
unsortedList = self.list
sortedList = []
indexSmallest = 0
while len(unsortedList)>0:
for i in range(len(unsortedList)):
if unsortedList[i] <= unsortedList[indexSmallest]:
indexSmallest = i
sortedList.append(unsortedList[indexSmallest])
unsortedList.pop(indexSmallest)
indexSmallest = 0
return sortedList
sorter = Sorter([2,6,1,8,5])
print(sorter.selectionSort())
我希望self.list
与调用selectionSort()
函数之前的相同,但是得到的结果是一个空的self.list
变量。
答案 0 :(得分:2)
使用以下任一方法:
#1
unsortedList = self.list.copy()
或
#2
unsortedList = self.list[:]
或
#3
import copy
unsortedList = copy.deepcopy(self.list)
说明:
当您通过=
进行分配时,实际上是指同一列表,只是该列表具有2个不同的名称。
要避免这种情况,请使用#1或#2方法->您将需要.copy()
内置函数或使用[:]
。
对于#3,在浅表复制还不够的情况下使用它,因为列表本身可能包含可变对象。
要进一步了解复制与深度复制,请访问并阅读here
答案 1 :(得分:1)
正在发生的事情是,当您设置unsortedList = self.list
时,Python不想复制所有值,因为这样做可能会很昂贵。相反,它只是使两个变量都指向相同的内存区域,因此,当您更改一个变量时,它也会更改另一个变量。
要进行复制,您可以进行unsortedList = self.list[:]
编辑,请参见this thread,以获取更多信息。