我为这个为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
答案 0 :(得分:6)
当您执行vctorsig = vctor
时,您正在vctorsig
对vctor
引用的列表进行引用,因此当您修改它时,您将修改原始列表。
如果您希望将列表复制到那里,您只需执行vctorsig = list(vctor)
。
答案 1 :(得分:3)
这有点难以辨别,因为你的缩进很有趣,但我认为这句话:
vctorsig = vctor
是你的问题。在此行中,您将为同一列表创建新的引用。换句话说,如果您更改vctorsig
(在此行vctorsig[j] = vctor[i]+j-i+1
中),您也会更改vctor
,因为它们相同的列表。解决这个问题的简单方法是制作副本:
vctorsig = vctor[:]