Python - 一个变量不应该等于另一个变量

标签 python variables

这是我的示例代码。它是 gauss seidel(矩阵求解器)的迭代过程。本质上,当错误足够小时,它就会跳出 while 循环。

i=1
while (i>0):
    x_past = x_present

    j=0
    while(j<3):
        value=0
        k=0
        while(k<3):
            if(k!=j):
                if(i==1):
                    if(k>j):
                        value=value+0
                    else:
                        value=value+x_present[k]*eqn[j][k]    
                else:
                    value=value+x_present[k]*eqn[j][k]
            else:
                value=value+eqn[j][k]
            k=k+1
        x_present[j:j+1]=[value]
        j=j+1
    print "X_PAST"
    print x_past
    print "X_PRESENT"
    print x_present    
    if(error(x_past, x_present)<10**-2):
        break;
    i=i+1

我减少了代码,使其更易于管理。如果你不明白它在做什么,那么它对解决这个问题就没有那么重要了。

问题来了。每次

x_present[j:j+1]=[value]

运行时,x_past 等于 x_present。我不知道为什么会这样,因为我将 x_past 设置为等于 x_present 的唯一位置是在循环的顶部。如果我拿走

x_past=x_present

句子,x_past 永远不会等于 x_present。这使我认为是导致问题的两个语句的某种组合。

这是一个大问题,因为如果 x_past = x_present 每次错误 = 0 并且循环在第一次迭代后中断。代码确实有效,例如,如果我告诉代码运行 8 次迭代,然后中断,它会给我应有的答案。

在过去的 4 个小时里,我一直在努力解决这个问题,但我完全被难住了。我使用 python 的时间不长,所以我在语法方面的故障排除技巧并不是那么好。任何帮助将不胜感激!!

最佳答案

是的,我认为这里的答案说明了您的问题。 只是想稍微澄清一下。

您正在引用一个列表,因此当列表更改时,对该列表的任何引用都将反射(reflect)该更改。演示:

>>> x_present = [4,5,6]
>>>
>>> x_past = x_present
>>>
>>> x_past
[4, 5, 6]
>>>
>>> x_present.append(7)
>>>
>>> x_past
[4, 5, 6, 7]
>>>

如果您想要列表的副本,您必须执行此操作,listcopy = mylist[:]。 (或 import copy;listcopy = copy.copy(mylist)

>>> x_past = x_present[:]
>>> x_past
[4, 5, 6, 7]
>>>
>>> x_present.append(8)
>>>
>>> x_past
[4, 5, 6, 7]

关于Python - 一个变量不应该等于另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264575/

相关文章:

ruby - 如何在 ruby​​ 中将符号作为 post 请求的参数传递?

mysql - 在 shell 中使用变量将密码传递给 mysql_config_editor

Python - 比较两个嵌套列表并编写第三个嵌套列表

python - 'unlink()' does not work in Python' s shared_memory on Windows

c++ - C++ 中的 int 和 long 有什么区别?

Java,如何通过引用传递

python - Matplotlib 将 numpy 矩阵绘制为 0 索引

Python - Paramiko 获取错误 "object has no attribute "get_fingerprint"

python - 如何访问存储在 Python 描述符上的属性?

php - 使用范围解析运算符(::) 分配变量与 $this->variable 相同吗?