2017-08-02 140 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