Python:数组值以某种方式变化

时间:2015-08-20 18:08:07

标签: python arrays numpy

在我的代码中,我已将数据加载到数组中。循环遍历数组时,每次执行else时,amat数组的数组值都会发生变化(仅适用于那些执行循环的地方)。

也就是说,for循环之前的amat[i]在for循环之后不等于amat[i],对于那些执行else语句的人来说。

这是我的代码段。

amat = np.loadtxt(infl)
for i,yentry in enumerate(amat):
    depth = yentry[0]
    if depth < dhigh:
        if depth >= dlow:
            if bint == 1:
                mindepth = dlow
            matline += yentry
            count += 1
    else:
        avgmat = matline / float(count)
        bavg[bint,:] = avgmat
        depthfix = round((dlow + dhigh)/2,1)
        bavg[bint,0] = depthfix
        stringlist.append((' '.join(['%10.6f ']*len(avgmat))+'\n') % tuple(avgmat))
        avgmat = yentry
        matline = yentry
        bint += 1
        count = 1
        dlow = dhigh
        dhigh += step

可能导致这种情况的原因是什么?如您所见,我没有任何应该影响amat值的陈述。然而,事情显然正在发生......

我知道如果没有完整的代码就难以诊断,但任何人都可以想到可能导致此问题的任何问题吗?如何在不对其应用任何操作的情况下修改我的数组?

1 个答案:

答案 0 :(得分:4)

定义时:

matline = yentry

else块内,然后执行:

matline += yentry

它实际上正在更改amat的一行。因为matline是对yentry的引用,因为它引用了amat的一行。

为防止这种情况,您可以通过创建副本来破坏参考:

matline = yentry.copy()