2017-08-02 76 views
-2

我有一个奇怪的行为与下面的代码中的变量。Python变量不应该改变,但它改变了吗?

为什么w3的输出与w2相同?它在代码中从来没有改变,但最终它具有与w2相同的值?

import numpy as np 

inpt = np.array([[1]]) 

w1 = np.random.random((1,1)) 
w2 = np.random.random((1,1)) 

w3 = w2 

print("First w3: ", w3) 

n1 = np.dot(inpt, w1) 
n2 = np.dot(n1, w2) 

delta = 1 - n2 

n1_d = np.dot(delta, w2.T) 

w2 += np.dot(n1.T, delta) 
w1 += np.dot(inpt.T, n1_d) 

print("Second w3: ", w3) 

print("Value of w2: ", w2) 

首先W3:[0.98377014]

二W3:[1.01105407]

W2的

值:[1.01105407]

什么时我在这里做错了吗?

+1

不是蟒蛇专家,所以我可能是错的。是否因为w3只是对w2的引用?所以当你改变w3时,w2引用w3的新值。它在这行后面改变'w2 + = np.dot(n1.T,delta)' –

+1

使用'w3 = np.copy(w2)' –

+0

看起来你并不清楚Python变量和赋值如何工作。这里有一个[方便的指南](https://nedbatchelder.com/text/names.html)。 – user2357112

回答

-1

w3仅仅是w2一个参考,因此它会反映w2的变化,当您更新w2