python 中的局部变量保持相同的内存地址
Local variable in python maintaining the same memory adress
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 只创建一个数据。
请帮忙,提前致谢
EDIT1:解释软件:我拿了一个包含某一年股票价格的 .txt 文件,每只股票每天都有一个价格,所以我的想法是创建一个股票列表,每只股票都有一个列表根据当天的价格,我的问题是我只使用一天的价值来测试,每只股票最终都与价值相乘。我已经打印了内存地址以查看导致问题的定位变量,因为它是一个 for 循环,它应该在每次迭代时更改内存地址并且 stockTemp.stockValues 没有改变
感谢@jasonharper 的回答,问题是我的 stockValues 变量是 class 属性(所有 class 实例的值相同)而不是实例属性。
代码固定:
class Stock:
def __init__ (self, name, code, currency):
self.name = name
self.code = code
self.currency = currency
self.stockValues = []
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 只创建一个数据。
请帮忙,提前致谢
EDIT1:解释软件:我拿了一个包含某一年股票价格的 .txt 文件,每只股票每天都有一个价格,所以我的想法是创建一个股票列表,每只股票都有一个列表根据当天的价格,我的问题是我只使用一天的价值来测试,每只股票最终都与价值相乘。我已经打印了内存地址以查看导致问题的定位变量,因为它是一个 for 循环,它应该在每次迭代时更改内存地址并且 stockTemp.stockValues 没有改变
感谢@jasonharper 的回答,问题是我的 stockValues 变量是 class 属性(所有 class 实例的值相同)而不是实例属性。 代码固定:
class Stock:
def __init__ (self, name, code, currency):
self.name = name
self.code = code
self.currency = currency
self.stockValues = []