我正在尝试使用以下递归函数。它应该在vspace(n)中找到最大的向量列表,使得所有向量彼此之间的距离至少为d。我目前的问题是变量sol似乎没有在本地表现。由于某种原因,当代码转换回早期的迭代时,变量sol不会恢复到bestCode迭代中的状态。有什么想法吗?
rlist是一个通过删除任何过于接近x(小于距离d)的向量来减少向量列表的函数。
def bestCode(n, d, sol):
best=[]
v = vspace(n)
for i in range(0, len(sol)):
v = rlist(sol[i], v, d)
if(len(v) != 0):
for i in range(0, len(v)):
sol2 = sol
sol2.append(v[i])
sol2 = bestCode(n, d, sol2)
if(len(sol2)>len(best)):
best = sol2
return best
else:
return sol
答案 0 :(得分:2)
Python变量是对象的引用。 sol2 = sol
之类的赋值只会创建对象的新引用。对于像列表这样的可变对象,sol2
可以看到对sol
的更改,因为它们都引用了相同的列表。如果您希望sol2
独立,则需要复制。对于列表,正常的方法是sol2 = sol[:]
。