【发布时间】:2024-01-22 12:18:01
【问题描述】:
我刚刚遇到了 *= 运算符在 python 中用于 numpy 数组的这种奇怪行为(至少对我而言)。如果我将一个局部变量(ndarray)传递给一个函数,然后将其称为 x,然后例如通过 x*= 2 修改 x,则此更改将传播到我调用该函数的范围。如果我做同样的事情但使用 x = x*2 我看不到这种行为。这是为什么?我期待 x*=2 和 x=x*2 是相同的。我只对 numpy 数组观察到这一点。感谢您的帮助,我还附上了示例代码。
import numpy as np
def my_func1(x_func):
x_func *= 2
return None
def my_func2(x_func):
x_func = x_func * 2
return None
def my_func():
x = np.array([1]) # expect x to keep this value in the scope of my_func
my_func2(x)
print(x) # x still [1]
my_func1(x)
print(x) # x changed to [2]!
my_func()
Out:
[1]
[2]
【问题讨论】:
-
这能回答你的问题吗? Difference between add and iadd?
-
同样适用于
mul/__mul__vsimul/__imul__等运算符。
标签: python variables operators variable-assignment numpy-ndarray