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が作成されるため、それを変更すると、元のリストが変更されます。vctorsigvctor

そこにリストをコピーしたい場合は、単にvctorsig = list(vctor).

于 2012-11-03T03:19:56.250 に答える
3

インデントがおかしいのでわかりにくいですが、次の行だと思います。

vctorsig = vctor

あなたの問題です。この行では、同じリストへの新しい参照を作成します。つまり、vctorsig(この行でvctorsig[j] = vctor[i]+j-i+1) 変更すると、同じ listvctorであるため、変更も行われます。これを回避する簡単な方法は、コピーを作成することです。

vctorsig = vctor[:]
于 2012-11-03T03:20:48.420 に答える