2017-09-14 2 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 당 단 하나의 데이터가 아니라 stockTemp.stockValues에 많은 양의 데이터를 생성합니다.파이썬에서 동일한 메모리 주소를 유지하는 로컬 변수

도와주세요, 사전에 감사

EDIT1 : 소프트웨어를 설명하면서 : 임 .txt 인을 복용 특정 한 해 동안 주가의 전체 파일 ideia이를 만드는 것입니다 때문에, 각각의 주식은 하루에 하나 개의 가격이 주식 및 각 주식의 목록은 하루에 따라 가격의 목록을 가지고, 내 문제는 그 가치가 하루에 값을 사용하여 각 주식은 가치에 대한 곱셈 항목으로 끝났다입니다. Mem 반복을 변경할 때마다 mem_address를 변경해야하고 forstTemp.stockValues가 변경되지 않는 for 루프이므로 문제를 일으키는 변수를 찾기 위해 mem 주소를 인쇄했습니다.

+0

'stockTemp.stockValues'이 목록, 그래서 메모리의 주소는 첫 번째 요소 (광범위)의 주소입니다 ... 당신이 인 이후, 그것은에 추가의 주소를 유지 머리는 변하지 않는다. –

+1

메모리 주소를 어떻게 결정합니까? 왜 신경을 씁니까? 파이썬과 같은 상위 레벨 언어의 요점은 당신이 저수준의 세부 사항을 가지고 주위를 비웃을 필요가 없다는 것입니다. – jwodder

+0

이것은 [XY 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)와 매우 비슷합니다. 파이썬에서 메모리 관리를 담당하는 언어 인 메모리 주소를 살펴보면 코드의 문제점을 알 수 있다고 생각하는 이유는 무엇입니까? – jwodder

답변

0

감사합니다. @jasonharper for the answer, 문제는 myStockValues ​​변수가 인스턴스 속성 대신 클래스 속성 (모든 클래스 인스턴스에 대해 동일한 값)이라는 점입니다. 코드 수정 :

class Stock: 

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