函数参数的范围

时间:2015-11-13 18:23:10

标签: python

我正在尝试使用以下递归函数。它应该在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

1 个答案:

答案 0 :(得分:2)

Python变量是对象的引用。 sol2 = sol之类的赋值只会创建对象的新引用。对于像列表这样的可变对象,sol2可以看到对sol的更改,因为它们都引用了相同的列表。如果您希望sol2独立,则需要复制。对于列表,正常的方法是sol2 = sol[:]