2017-09-14 148 views
0
class StockValues: 
    def __init__ (self, DD, MM, YYYY, averageValue): 
     self.date = map (str, [DD, MM, YYYY]) 
     self.averageValue = averageValue 

class Stock: 
    stockValues = [] 

    def __init__ (self, name, code, currency): 
     self.name = name 
     self.code = code 
     self.currency = currency 

Stocks = [] 
for index, stock in enumerate(StocksBufferToMemory): 
    #print ("{0:.0f}%".format(float(index)/len(StocksBufferToMemory) * 100)) 
    stockTemp = Stock (stock.name, stock.code, stock.currency) 
    stockTempValues = StockValues (stock.date[0], stock.date[1], stock.date[2], stock.averageValue) 
    stockTemp.stockValues.append (stockTempValues) 
    Stocks.append (stockTemp) 
    print (stockTempValues) 

此代碼在stockTemp.stockValues中創建大量數據,而不是僅爲每個stockTemp一個數據。Python中保存相同內存地址的局部變量

請幫幫忙,謝謝提前

EDIT1:解釋軟件:我要帶去一個.txt在某一年文件的完整股票價格,每隻股票每天一個價,所以IDEIA是創建一個股票清單和每個股票都有根據當天的價格清單,我的問題是即時通訊只使用一天的價值進行測試,而每隻股票最後都會以價值乘法條目結束。我已經打印了mem地址,以查看導致問題的定位許可變量,因爲它是for循環,所以它應該在每次迭代時更改存儲器地址,並且stockTemp.stockValues不會更改

+0

'stockTemp.stockValues'是一個列表,所以它在內存中的地址是唯一的第一個元素(廣義)的地址...的,因爲你不斷追加到它,的地址頭不改變。 –

+1

你如何確定內存地址,爲什麼你甚至在意?像Python這樣的高級語言的重點在於,你不需要像這樣的低級細節。 – jwodder

+0

這看起來很像[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。是什麼讓你認爲在Python中查看內存地址 - 一種爲你處理內存管理的語言 - 會告訴你代碼有什麼問題? – jwodder

回答

0

感謝@jasonharper爲答案,問題是我的stockValues變量是一個類屬性(所有類實例的值相同)而不是實例屬性。 代碼固定:

class Stock: 

def __init__ (self, name, code, currency): 
    self.name = name 
    self.code = code 
    self.currency = currency 
    self.stockValues = []