2

我对我为 python 编写的这个函数感到震惊。我观察到在较低的位置while它会更改列表中的值,vctor即使该列表没有沿函数触及。我已经通过了这对(10, [1,3,5,7,10]),它已将列表更改vctor[1,3,5,8,10]. 对此有解释吗?

def siguiente(k,vctor):
    l = len(vctor)
    vctorsig = vctor
    i = l-1
    while i>= 0:    
        if vctorsig[i] <= k - l + i: 
            j=i
            while j<=l-1:
                print vctor
                vctorsig[j] = vctor[i]+j-i+1
                j=j+1
            i = -1
        else:
            i = i-1
    return vctorsig    
4

2 回答 2

6

当您这样做时vctorsig = vctor,您正在对vctorsig引用的列表进行引用vctor,因此当您修改它时,您会修改原始列表。

如果您想将列表复制到那里,您可以简单地执行vctorsig = list(vctor).

于 2012-11-03T03:19:56.250 回答
3

有点难以分辨,因为您的缩进很有趣,但我认为这行:

vctorsig = vctor

是你的问题。在这一行中,您创建了对同一列表的新引用。换句话说,如果你改变vctorsig(在这一行vctorsig[j] = vctor[i]+j-i+1),你也会改变,vctor因为它们是相同的 list。解决这个问题的简单方法是制作副本:

vctorsig = vctor[:]
于 2012-11-03T03:20:48.420 回答