python附加奇怪的行为

时间:2011-11-04 20:53:49

标签: python list

我创建了一个对象类型..在初始化后我将其推入列表中。 但由于某种原因,行为并不像预期的那样。 让我输入示例代码..然后输出。

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

所以我的查询是因为我正在进行追加..为什么日期元素被覆盖? 在我做错的任何线索? 感谢

1 个答案:

答案 0 :(得分:2)

您正在使用相同的productpart实例,只是改变它:

productPart._date = modDate

由于所有PilotTest个对象都引用了同一个productPart实例,所以所有都会看到突变。

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

productPart = ...something here...