附加没有像预期的那样工作[关闭]

Posted

技术标签:

【中文标题】附加没有像预期的那样工作[关闭]【英文标题】:Append not working like expected [closed] 【发布时间】:2017-04-17 13:12:19 【问题描述】:

我有以下问题: 对于遗传算法,我创建了 5 个突变并将它们存储在准备好的列表中(参见下面的代码)。

这是我要附加变异驱动程序的函数:

def startNewRunFromScratch(self):
    self.log.logBlue('Starting new run from scratch', 2, 0)
    parameterSet = []
    parameterSet.append(Parameter('TEST', 0.5, 0, 1))

    defaultGDriver = GDriver(parameterSet)
    gDriverList = []
    gDriverList.append(defaultGDriver)
    m = Mutation(self.mutationRate)
    for i in range(1, self.populationSize, 1):
        g = m.mutate(defaultGDriver)
        self.log.log('After mutaion: '+str(g.parameterSet[0].value), 0, 2)
        gDriverList.append(g)
    self.startSuite(gDriverList)

这里是startSuite原型函数:

def startSuite(self, gDriverList):
    self.log.logSuccess('Starting suite', 1, 0)
    for g in gDriverList:
        self.log.log('Inside suite: '+str(g.parameterSet[0].value), 0, 2)

问题是,输出不符合我的逻辑:

Starting new run from scratch
        After mutaion: 0.5
        After mutaion: 0.5
        After mutaion: 0.5
        After mutaion: 0.740296236666

Starting suite
        Inside suite: 0.740296236666
        Inside suite: 0.740296236666
        Inside suite: 0.740296236666
        Inside suite: 0.740296236666
        Inside suite: 0.740296236666

预期输出:

Inside suite: 0.5
Inside suite: 0.5
Inside suite: 0.5
Inside suite: 0.5
Inside suite: 0.740296236666

有没有人知道如何解决这个问题?也许我错过了什么。

【问题讨论】:

【参考方案1】:

您重复附加相同的Mutation,并最终在列表中多次引用它。如果您想要不同的Mutations,您必须创建新的。 (我认为这就是您认为的“问题​​”,因为您从未明确说明输出有什么问题。)

【讨论】:

与 m.mutate() 我正在创建新的。突变后查看日志 @johni07:记录g的当前值;它不会告诉你 g 是否是一个新对象。列表中的所有对象都“神奇地”取最后一个值,这强烈表明它们都是同一个对象。

以上是关于附加没有像预期的那样工作[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

css flexbox / tailwind 'simple' 对齐没有像我预期的那样工作

如何在Python中的for循环内创建对象列表而不继承属性值[重复]

Vue计算属性未按预期工作[关闭]

将文本附加到类名

在 C 中进行二进制到十进制转换的程序没有像预期的那样工作,而是给出了一些随机输出

RecyclerView:没有附加适配器;跳过布局[重复]