为什么" x"的价值呢?更改?

时间:2017-06-08 01:15:11

标签: python python-3.x

这是我的代码:

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)

所以问题是为什么x的价值在没有收到任何东西的情况下会发生变化?

2 个答案:

答案 0 :(得分:1)

当你把:

y = x

所有x正在执行的操作是作为指向内存中列表对象的指针。当你执行上述操作时,你说我希望y指向内存中x引用的相同列表。任何更改为y的更改也会影响x。

如果您希望将引用y指向内存中的其他对象(与x具有相同的值),则需要复制x。

y = x[:] #make a copy.  SEE EDIT

现在y和x将指向内存中的不同列表对象,但两个对象将具有相同的值。

请注意,python中的任何可变数据类型都共享此引用属性,例如:sets,dictionaries,lists,byte arrays以及某些类。

查看python中可变数据类型和不可变数据类型之间的差异,因为这种区别很关键,如果不知道python如何访问不同的数据类型,就会导致不可忽视的错误。

修改!!

抱歉,我没有注意到x是由一系列列表组成的。您需要使用deepcopy来复制嵌套列表!

from copy import deepcopy
y = deepcopy(x)

答案 1 :(得分:0)

当你写:

y = x

你真的说x等于y。这不会复制x。无论你对x做什么都会发生在y,反之亦然。如果您希望它们是独立的,您需要复制x