在不知道after =的情况下进行变量更改

时间:2014-08-08 23:40:15

标签: python arrays equals

如果我不更改b

,为什么我会得到一个相同的数组?
a=[6,5,4,2,64,23]
b=a;
for k in range(len(a)): a[k]=59-a[k];

print b,a

>>> [53, 54, 55, 57, -5, 36] [53, 54, 55, 57, -5, 36]

3 个答案:

答案 0 :(得分:4)

对象referencea而不是副本,请尝试b = a[:]

In [1]: a=[6,5,4,2,64,23]

In [2]: b=a;

In [3]: id(a)
Out[3]: 139758187681768

In [4]: id(b)
Out[4]: 139758187681768
In [5]: b is a
Out[5]: True

In [6]: b = a[:]

In [7]: id(a)
Out[7]: 139758187681768

In [8]: id(b)
Out[8]: 139758187615296

In [9]: b is a
Out[9]: False

b = a[:]创建一个新对象,该对象是a的副本,因此中的任何更改都会影响b

使用b = a只是指向同一对象的指针,因此更改a会更改b因为我们在上面看到a is b

答案 1 :(得分:2)

这就是参考的概念。

如果您说明b=a,则复制数组。两个变量都指向同一个数组。因此,通过一个变量(名称)进行修改与另一个变量(名称)相同,并且两个变量都指向同一个数组。

可以使用b=a[:]

在python中复制数组

答案 2 :(得分:2)

b引用a,这意味着它不是副本,而是说:"如果你想知道我在那里看到什么"并指向a

如果b是a的副本,这是通过执行b=a[:]来实现的,那么b将是a的副本,而不会在a时更改1}}更改,因为它不再是我们b=a时的参考。