我有一个名为self.nodePathList的列表,其中包含[782,455,231]。然后我将它放入另一个列表变量:self.sortedNodePath = self.nodePathList。这两个列表现在包含相同的内容。我排序self.sortedNodePath。然而,他们都被分类了。我一遍又一遍地检查代码,但我没有做出任何拼写错误或使用错误的名称。如果你想使用它,代码如下
self.sortedNodePath = self.nodePathList
#######sorting
for passnum in range(len(self.sortedNodePath)-1,0,-1):
for i in range(passnum):
if self.sortedNodePath[i]>self.sortedNodePath[i+1]:
self.temp = self.sortedNodePath[i]
self.sortedNodePath[i] = self.sortedNodePath[i+1]
self.sortedNodePath[i+1] = self.temp
#######END OF SORTING
答案 0 :(得分:3)
在您的示例中,self.sortedNodePath
和self.nodePathList
都指向同一个对象。当您对该对象进行排序时,两个变量仍指向它。
您需要使用以下方法创建新对象:
self.sortedNodePath = list(self.nodePathList)
举个例子:
foo = ['test', 'foo']
bar = foo
print id(foo)
>>> 23367192
print id(bar)
>>> 23367192 # You can see both foo and bar have the same object ID
bar = list(foo)
print id(bar)
>>> 23387392 # Now using list(), bar has a separate object ID from foo
答案 1 :(得分:0)
您没有创建两个列表,而是创建了对同一列表的两个引用。
答案 2 :(得分:0)
如果您使用print id(self.sortedNodePath)
和print id(self.NodePathList)
检查这两个列表对象的ID,您会发现它们实际上都是相同的列表。
制作真实副本:
self.sortedNodePath = []
self.sortedNodePath.extend(self.nodePathList)
另外,请注意,在Python中,通常会使用sorted(list)
或list.sort()
对列表进行排序。如果列表中的项不是Python知道如何比较的简单类型,则可以为sorted()
和list.sort()
提供一个函数,用于为列表中的每个对象提取比较值