如果我不更改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]
答案 0 :(得分:4)
对象reference
有a
而不是副本,请尝试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[:]
答案 2 :(得分:2)
b
引用a
,这意味着它不是副本,而是说:"如果你想知道我在那里看到什么"并指向a
。
如果b
是a的副本,这是通过执行b=a[:]
来实现的,那么b
将是a
的副本,而不会在a
时更改1}}更改,因为它不再是我们b=a
时的参考。