Локальная переменная в Python, поддерживающая тот же адрес памяти

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.

Пожалуйста, помогите, спасибо заранее

РЕДАКТИРОВАТЬ 1: Объяснение программного обеспечения: Я беру.txt файлы, полные цен акций в течение определенного года, каждая акция имеет одну цену в день, поэтому идея состоит в том, чтобы создать список акций, и каждая акция имеет список цен в соответствии с день, моя проблема в том, что я использую только один день значений для тестирования, и каждая акция заканчивается умножением записей для значений. Я напечатал адрес mem, чтобы увидеть, что переменная locate вызывает проблему, так как это цикл for, он должен менять адрес памяти каждый раз, когда он повторяется, а stockTemp.stockValues ​​не меняется

1 ответ

Решение

Спасибо @jasonharper за ответ, проблема в том, что моя переменная stockValues ​​является атрибутом класса (одинаковое значение для всех экземпляров класса) вместо атрибута экземпляра. Код исправлен:

class Stock:

def __init__ (self, name, code, currency):
    self.name = name
    self.code = code
    self.currency = currency
    self.stockValues = []
Другие вопросы по тегам