2017-09-14 106 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 = []