如果变量用作函数的参数,则使用参数在函数内部完成的所有修改都将应用于变量。 This is normal and expected,但在许多情况下是不受欢迎的。防止这种行为的最佳做法是什么?例如:
import numpy as np
def func(A):
for ind in range(A.shape[0]):
A[ind] = A[ind]+1
return A
A = np.array([1, 2, 3])
NewA = func(A)
print(A)
print(NewA)
Out: [2, 3, 4]
Out: [2, 3, 4]
虽然我们想要:
Out: [1, 2, 3]
Out: [2, 3, 4]
到目前为止,我只提出了两个想法。
方法一:显然,传递一个变量的副本:
A = np.array([1, 2, 3])
NewA = func(A.copy())
print(A)
print(NewA)
Out: [1, 2, 3]
Out: [2, 3, 4]
返回预期但当一个函数有5个参数时变得非常烦人:每次输入.copy()都太长了。
方法二: 修改函数体
def func(A):
B = A.copy()
for ind in range(B.shape[0]):
B[ind] = B[ind]+1
return B
这同样令人烦恼,需要修改功能。 还有其他想法吗?
答案 0 :(得分:-2)
这是由于参数的类型。如果参数是不可变对象,例如int
或string
,则它的作用类似于按值调用。如果它是一个可变对象,例如np.darray
,它的作用类似于引用调用。