使用+ =运算符时,numpy中是否存在错误

时间:2019-10-24 13:54:42

标签: python numpy

在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全局范围内的值保持不变。

2 个答案:

答案 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