Python 原始参数被覆盖
我在Python中有一个函数:Python 原始参数被覆盖,python,parameter-passing,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
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],
1.166667][0.05,0.05,1.166667]
[0.05,0.05,-0.83333300000000001],[0.05,0.05,-0.83333300000000001],
[0.05, 0.05, -0.8333330000000001]] [0.05, 0.05, -0.8333330000000001]
[0.05,0.05,-0.83333300000000001]
K点值为:[0.05,0.05,-0.83333300000000001](原始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]时,一切都正常。当你
ktemp=kor
时,你会得到两个指向同一个列表对象的名称&因此对ktemp
的修改与修改kor
相同。如果你想要列表的副本,你需要说ktemp=kor>[:]
(假设kor
仅仅是数字-如果您想要一个包含复杂对象的列表的“深度副本”,那是另一个问题)(假设kor
只是数字——如果你想要一个包含复杂对象的列表的“深度副本”,那是另一个问题)(假设kor
只是数字——如果你想要一个包含复杂对象的列表的“深度副本”,那是另一个问题)(假设kor
只是数字-如果你想要一个包含复杂对象的列表的“深度副本”,那是另一个问题)。欢迎这么做。这可能有助于让我们知道一开始使用的是哪种语言-最好是添加相应的标记。我想你可以删除“覆盖”当你在做的时候,这个是没有帮助的。看起来像是缩进被破坏的python。我不知道为什么它会破坏我的缩进,但是函数的主体都是缩进的。欢迎这么做。这可能有助于让我们知道哪种语言是在开始时使用的——最好是添加相应的标记。我想你可以删除“覆盖”当你在做的时候,这个是没有帮助的。看起来像是缩进被破坏的python。我不知道为什么它会破坏我的缩进,但是函数的主体都是缩进的。欢迎这么做。这可能有助于让我们知道哪种语言是在开始时使用的——最好是添加相应的标记。我想你可以删除“覆盖”当你在做的时候,这个是没有帮助的。看起来像是缩进被破坏的python。我不知道为什么它会破坏我的缩进,但是函数的主体都是缩进的。欢迎这么做。这可能有助于让我们知道哪种语言是在开始时使用的——最好是添加相应的标记。我想你可以删除“覆盖”当你在做的时候,那一个是没有帮助的。看起来像是缩进被破坏的python。我不知道为什么它会破坏我的缩进,但是函数的主体都是缩进的。非常感谢,它做到了。非常感谢,它做到了。非常感谢,它做到了。非常感谢,它做到了。非常感谢,它做到了。