如何阻止函数更新数组?



下面的函数在每次调用数组时更新数组的值:

import numpy as np
def disc(vectors, i, ptr, total):
if ptr[i] < 0:
return total
else:
total+=vectors[i]
return disc(vectors, ptr[i],ptr,total)
testvec=np.array([[0,0],[1,0],[0,0],[0,0],[1,-1],[0,-1],[1,-1],[0,-1],[0,0]])
ptr=np.array([-10,2,-6,-10,2,2,4,4,-10])
t=np.array([0,0])
print(disc(testvec,7,ptr,t))
print(t)
print(disc(testvec,1,ptr,t))

。在被调用后,数组t的值被更新。是否有可能在函数内将t重置为[0,0]或根本不改变值?

对于上下文,我正在实现一个用于渗透的包装算法。该函数对树上的向量求和,详见https://arxiv.org/pdf/cond-mat/0101295.pdf。

在您的特定情况下,如果您不希望修改变量,您可以不修改它:

def disc(vectors, i, ptr, total):
if ptr[i] < 0:
return total
else:
return disc(vectors, ptr[i],ptr,total+vectors[i])

一般来说,你可以在copy.deepcopy中包装函数的参数,以确保只传递一个副本,而原始变量不被修改。