【问题标题】:Python: for loop - why is the variable assigned before attribution? [duplicate]Python:for循环 - 为什么在归因之前分配变量? [复制]
【发布时间】:2021-05-07 09:32:19
【问题描述】:

如果这看起来是一个愚蠢的问题,我很抱歉,但我发誓我搜索了很多,但我无法理解我找到的任何回复,因为他们提到了列表列表和列表理解,我认为这不适用于这里(如果适用,我很抱歉)。

代码如下:

resultado_anterior = [0, 0, 0, 0]

for k in range(max_iteracao):
    print('variable "resultado_anterior" = ', resultado_anterior[0])
    resultado[0] = matriz[0][4] - (mult(0,1) + mult(0,2) + mult(0,3))
    resultado[1] = matriz[1][4] - (mult(1,0) + mult(1,2) + mult(1,3))
    resultado[2] = matriz[2][4] - (mult(2,0) + mult(2,1) + mult(2,3)) 
    resultado[3] = matriz[3][4] - (mult(3,0) + mult(3,1) + mult(3,2))
    print('variable "resultado_anterior" = ', resultado_anterior[0])
    print('variable "resultado" = ', resultado[0])
    
    resultado_anterior = resultado

我的目的是将“resultado”的前一个结果存储在一个变量(“resultado_anterior”)中,以便我可以比较它们并找到错误。奇怪的是,虽然变量“resultado_anterior”的属性保留在最后一行,但当“resultado”在第 5 到 8 行更新时,它的值也会更新。这里我展示了“打印”行的结果。正如上面很容易注意到的那样,在更改变量“resultado”的值之前有一个打印,在它之后还有另一个打印,但仍然在“resultado_anterior”的更改之前。

变量“resultado_anterior”=0

变量“resultado_anterior”=0

变量“结果”= 9.0

考虑到上面的结果,代码没有问题。但是下面的结果是最奇怪的:

变量“resultado_anterior”=9.0

变量“resultado_anterior”=6.458333333333333

变量“结果”= 6.458333333333333

如您所见,在更改“resultado”之前,变量“resultado_anterior”等于 9.0,但在更新“resultado”后其值变为 6.4583,即使它位于负责归因的行之前。这样一来,“resultado”就等于“resultado_anterior”,而错误实际上不是“等于零”。

简而言之,问题在于变量“resultado_anterior”的值是在负责的行之前分配的。

有什么办法可以解决吗?最让我吃惊的是,在第一次循环的时候并没有出现错误。

【问题讨论】:

标签: python for-loop


【解决方案1】:
resultado_anterior = resultado

几乎可以肯定问题出在这条线上。见此链接:List changes unexpectedly after assignment. Why is this and how to prevent it?

你基本上是指向同一个底层内存对象,使用list.copy()来得到想要的结果。

【讨论】:

  • resultado.copy()resultado[:]list(resultado)copy.copy(resultado)。它们都有效,有不同的情况可能有利于其中一种(幸运的是,随着 Python 2 的消亡,您通常可以期望 resultado.copy() 得到支持;当您可能必须支持 Python 2 时,它不是一个选项)。
猜你喜欢
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多