原始论点被覆盖

时间:2013-12-12 17:43:23

标签: python parameter-passing

所以我在Python中有这个功能:

def newk(kor, flds):
    field=0.5*flds
    knw=[]

    for i in range(flds):
        ktemp=kor
        if ktemp[2]+i>field:
            ktemp[2]-=(i-1)
        else:
            ktemp[2]+=i
        knw+=[ktemp]
        print knw
        print ktemp
        print kor, '\n'
    return knw

由以下人员调用:

knew=newk(kvals, folds)

由于某种原因,我原来的kvals被覆盖了。 Kvals是一个清单。 ktemp也会像knw一样继续积累并且它会拧紧 一切都好了。我的输出如下:

  

[[0.05,0.05,0.166667]] [0.05,0.05,0.166667] [0.05,0.05,0.166667]

     

[[0.05,0.05,1.166667],[0.05,0.05,1.166667]] [0.05,0.05,   1.166667] [0.05,0.05,1.166667]

     

[[0.05,0.05,-0.8333330000000001],[0.05,0.05,-0.8333330000000001],   [0.05,0.05,-0.8333330000000001]] [0.05,0.05,-0.8333330000000001]   [0.05,0.05,-0.8333330000000001]

     

K点值为:[0.05,0.05,-0.8333330000000001](原始kvals为[0.05,0.05,0.166667]

但是我需要我的输出看起来像这样:knw将是[[0.05, 0.05, 0.166667],[0.05, 0.05, 1.166667],[0.05, 0.05, -0.833333],kval将是[0.05, 0.05, 0.166667] 此外,当我将循环中的ktemp = kor更改为常量ktemp = [0.05,0.05,0.166667]时,一切正常。

1 个答案:

答案 0 :(得分:3)

当你ktemp=kor时,你最终得到了两个指向相同列表对象的名字。因此对ktemp的修改与修改kor相同。如果你想要列表的副本,你需要说ktemp = kor[:](假设kor只是数字 - 如果你想要一个包含复杂对象的列表的'深层复制' ,这是一个不同的问题。)