在phyton中使用函数时,系统会告知我实际上是解析了我的值的副本。在下面显示的示例中,将函数应用于参数a。在这里,我希望将a的副本发送给fun函数。在此函数中,仅提供a的副本,而不提供全局范围内的参数a。我什至给它起了另一个名字:b。当我在函数中修改值b时,全局范围内的参数a也将更改。这应该是正确的吗?
import numpy as np
def fun(b):
b += np.array([1,1])
a = np.array([1,1])
fun(a)
print(a)
我希望得到np.array([1,1])
,但我得到np.array([2,2])
仅当我在fun函数中使用+ =运算符时,才会发生这种情况。如果我改用b = b + np.array([1,1])
,则on全局范围内的值保持不变。
答案 0 :(得分:0)
在python中,列表数据类型是可变的,这意味着每次运行函数时,列表都会不断增长。
关键时刻在这里: b += np.array([1,1])
您已经获得a
,它是[1, 1]
,并将其添加到另一个数组,即[1, 1]
,您将得到[2, 2]
,它应该是这样。< / p>
您最终将修改a
答案 1 :(得分:0)
致电fun()
时,您无需复制a
并修改b
,而是将a
本身传递给fun()
并引用像b
一样。
就这样
b += np.array([1,1])
修改a
。