我修改了一个numpy数组,但它修改了2 ...?

时间:2017-10-22 09:58:52

标签: python numpy

我的numpy数组修改有一个奇怪的行为。它可能是一个正常的" python中的行为,但我并不习惯这种语言:

B=[[1,2,3],[4,5,6],[7,8,9]]

b=np.asarray(B)
c=b
print("I display b :")
print(b)
c[0,0]=-c[0,0] # I multiply this coordinates by -1


print("I display c (modified at the right place : ok)")
print(c)
print("But b has also been modified ???!!!")
print(b)

输出:

    I display b :
[[1 2 3]
 [4 5 6]
 [7 8 9]]
I display c (modified at the right place : ok)
[[-1  2  3]
 [ 4  5  6]
 [ 7  8  9]]
But b has also been modified ???!!!
[[-1  2  3]
 [ 4  5  6]
 [ 7  8  9]]

为什么b已被修改,即使我从未改变它?我只改变了......?

3 个答案:

答案 0 :(得分:4)

因为python是通过引用工作的,所以当你设置13 13 10 2 1 时,它们都引用同一个对象。因此,对c的更改会影响b。 您可能希望执行以下操作:

c=b

这会使c成为一个新对象,修改它不会再影响b。

或使用numpy:

import copy
c = copy.copy(b)

答案 1 :(得分:1)

c只是一个别名。如果要复制数组,请使用c = np.copy(b)。

答案 2 :(得分:0)

除了已经提到的复制方法之外,您还可以像这样创建变量c的副本:

B=[[1,2,3],[4,5,6],[7,8,9]]
b=np.asarray(B)
c = b.copy()

c[1, 1] = 15
print(b)
print(c)

会给你这样的输出:

[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[ 1  2  3]
 [ 4 15  6]
 [ 7  8  9]]