2011-11-04 78 views
1

我已经创建了一个对象类型..并初始化后,我把它推入列表。 但由于某种原因,行为并不如预期。 让我把示例代码..然后输出。蟒蛇追加奇怪的行为

def allignDatesToWhenWasItemSold(pilotInstance): 
    unitsSoldPerDay = pilotInstance._units_sold_per_day 
    productPart = pilotInstance._product 
    date = productPart._date 
    quantity = pilotInstance._product._quantity 

    listOfPilotInstance = [] 
    for i in range(len(unitsSoldPerDay)): 
     perDayQuantity = unitsSoldPerDay[i] 
     #modDate = date 
     #print perDayQuantity 
     modDate = modifyDate(date, i) 
     productPart._date = modDate 

     #print "pro ", productPart._date 
     newPilotInstance = PilotTest(productPart, pilotInstance._name,perDayQuantity) 
     print "here ",newPilotInstance._product._date._date, ' ',newPilotInstance._product._date._month, ' ', newPilotInstance._units_sold_per_day 
     #newPilotInstance.setDate(modDate) 

     listOfPilotInstance.append(newPilotInstance) #note this line.. this is where the trouble is 
     for k in listOfPilotInstance: 
      print k._product._date._date 

    for ele in listOfPilotInstance: 
     print "there " ,ele._product._date._date, ' ',ele._product._date._month, ' ',ele._units_sold_per_day 
    return listOfPilotInstance 

的出认沽表现如下

here 30 7 1 
30 
here 31 7 0 
31<--- now this shouldnt be like this.. as I am doing append.. teh first ele shoulnt be overwrited?? 
31 
here 1 8 2 
1 
1 
1 
there 1 8 1 
there 1 8 0 
there 1 8 2 

所以我的查询是因为我做了追加..为什么日期元素越来越overwrited? 任何线索,因为我在做什么错了? 感谢

+0

注:'对于我,perDayQuantity枚举(unitsSoldPerDay):'是更pythonic。 – nmichaels

回答

2

您使用的是相同的productpart实例,只是变异它:

productPart._date = modDate 

由于所有PilotTest对象都有一个参考同productPart例如,所有的人都看到了突变。

您需要在循环的每次迭代中创建类的新实例,并将此新实例分配给productPart

productPart = ...something here... 
+0

那么在for循环中?像productPart = pilotInstance._product ??? – Fraz

+0

@Fraz:不,那还不是一个*新的*实例。你仍然只是重复使用同一个实例。 –

+0

哦,明白了。 :)非常感谢谢谢.. :) – Fraz