在我的代码中,我已将数据加载到数组中。循环遍历数组时,每次执行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值的陈述。然而,事情显然正在发生......
我知道如果没有完整的代码就难以诊断,但任何人都可以想到可能导致此问题的任何问题吗?如何在不对其应用任何操作的情况下修改我的数组?
答案 0 :(得分:4)
定义时:
matline = yentry
在else
块内,然后执行:
matline += yentry
它实际上正在更改amat
的一行。因为matline
是对yentry
的引用,因为它引用了amat
的一行。
为防止这种情况,您可以通过创建副本来破坏参考:
matline = yentry.copy()