why did the value of “x” change?
本问题已经有最佳答案,请猛点这里访问。
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | x = [[1],[1],[1],[-1]] a = [[-2,-1,-1,-2],[1,-2,2,-1],[-1,-2,-2,-1],[2,-1,1,-2]] h = 0.1 def K(h,a,x): cont = [1,2,3,4] k = [] for i in range(len(cont)): k.append(h*cont[i]) y = x print('original value',x) for j in range(len(y)): y[j][0] += k[j]/4 print('modified value',x) K(h,a,x) |
所以问题是,如果没有收到任何东西,那么为什么
当你放:
1 | y = x |
X所做的就是充当内存中列表对象的指针。当你做上面的操作时,你是说我希望Y指向内存中X引用的同一个列表。对y的任何位置更改也会影响x。
如果希望引用y指向内存中的另一个对象(具有与x相同的值),则需要复制x。
1 | y = x[:] #make a copy. SEE EDIT |
现在Y和X将指向内存中不同的列表对象,但这两个对象的值相同。
请注意,python中的任何可变数据类型都共享此引用属性,例如:集合、字典、列表、字节数组以及一些类。
查看python中可变数据类型和不可变数据类型之间的区别,因为这种区别非常重要,并且会导致无法识别的错误,而不知道python如何访问不同的数据类型。
编辑!!
抱歉,我没有注意到X是由一系列列表组成的。您需要使用deepcopy来复制嵌套列表!
1 2 | from copy import deepcopy y = deepcopy(x) |
当你写:
1 | y = x |
你的字面意思是