我偶然发现赋值运算符+=的一些奇怪行为,这完全让我感到困惑。请参阅以下代码片段:
import numpy as np
def myalg(data, alpha, beta):
adash=np.zeros(len(data))
a=np.zeros_like(adash)
a_=np.zeros_like(a)
gain=1
count=0
while count<3:
adash=adash+alpha*np.gradient(data)
a_old=a
print( a_old)
#a+=alpha* (np.gradient(adash)+ alpha* data)
a=a+alpha* (np.gradient(adash)+ alpha* data)
print( a_old)
a/=1+alpha*beta
#a=a/(1+alpha*beta)
print( a_old)
a_=2*a-a_old
gain=la.norm(a-a_old)
count+=1
print(a)
print(a_)
print(adash)
print(gain)
data=np.arange(6)
myalg(data, alpha=0.4, beta=0.25)
我原以为在交换上述备选行的一条“评论”时不会发生任何变化。虽然a
-数组在每种情况下都是相同的,但代码确实发生了变化a_old
:
当选择a=a+...
时,a_old
保持不变,无论下面选择了a/=
还是a=a/...
中的哪一个。
但是,在选择赋值运算符a+=
时,a_old
的行为类似于指向a
的“指针”。因此print(a_old)
每次被调用时都会产生a
的值,直到a
被明确地赋值(例如a= a/...
,而不是像+=, -=, *=, /=
这样的赋值操作符)
那么为什么阵列会出现这种情况呢
编辑:我知道它是怎么发生的,但我不明白为什么会发生这种情况。 例如,整数或浮点数为什么不出现这种行为
请查看每行上的注释以了解行为不同的原因(注意:缩进是为了清晰起见,而不是为了编码):
相关问题 更多 >
编程相关推荐