所以我在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]时,一切正常。
答案 0 :(得分:3)
当你ktemp=kor
时,你最终得到了两个指向相同列表对象的名字。因此对ktemp
的修改与修改kor
相同。如果你想要列表的副本,你需要说ktemp = kor[:]
(假设kor
只是数字 - 如果你想要一个包含复杂对象的列表的'深层复制' ,这是一个不同的问题。)