原始论点被改写

2024-04-19 09:06:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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 point values are: [0.05, 0.05, -0.8333330000000001] (original kvals was [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]时,一切都正常。你知道吗


Tags: 函数infieldforifdefrangeelse
1条回答
网友
1楼 · 发布于 2024-04-19 09:06:16

ktemp=kor时,两个名称指向同一列表对象,因此对ktemp的修改与修改kor相同。如果你想要一个列表的副本,你需要说ktemp = kor[:](假设kor只是数字-如果你想要一个包含复杂对象的列表的“深度副本”,那是另一个问题)。你知道吗

相关问题 更多 >