【问题标题】:Python for loop behaviorPython for 循环行为
【发布时间】:2016-03-16 18:53:40
【问题描述】:

以前从来没有在 python 中运行过这个,我想知道它为什么会发生以及如何避免它。当我设置y = redundanciesArray 时,我想制作数组的副本,更改某个索引处的值,对该更改采取行动,然后将y 重置为数组的新副本。发生的情况是第一次通过redundanciesArray = [2,1,1,1,1],第二次通过[2,2,1,1,1]。这有点像y 充当指向redundanciesArray 的指针。我想我没有正确使用数组或其他东西,希望有人能阐明我在这里缺少的东西。

redundanciesArray = [1, 1, 1, 1, 1]
probabilityArray =  [0.5, 0.5, 0.5, 0.5, 0.5]   
optimalProbability = 0
index = -1

for i in range(0, len(redundanciesArray)):
    y = redundanciesArray
    y[i] = y[i] + 1
    probability = calculateProbability(y, probabilityArray)
    //calcuateProbability returns a positive float between 0 and 1

    if(probability > optimalProbability):
        optimalProbability = probability
        index = i

【问题讨论】:

  • 你想复制你的数组,选项见stackoverflow.com/questions/2612802/…
  • 是的,这行得通,我复制了冗余数组,而不是仅仅将其设置为相等。那么我在这个现有的代码中到底在做什么呢?让 y 成为指针?

标签: arrays python-3.x for-loop


【解决方案1】:

Python 使用名称,其行为有点类似于引用或指针。原来如此

y = redundanciesArray

只会使y 指向redundanciesArray 已经指向的同一个 对象。 yredundanciesArray 都只是同一个对象的名称(“引用”)。

如果你随后执行y[i] = y[i] + 1,它将修改iyredundanciesArray 指向的对象中的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多