a=b,当a改变时,b还会等于a吗

  • 本文关键字:改变 python
  • 更新时间 :
  • 英文 :


很抱歉在python numpy中出现一个非常简单的问题当我试图让a等于b(如下代码(

import numpy as np
a=np.array((1,2))
b=np.array((3,4))
b=a
a=np.array((5,6))

我得到的是:

a=array([5,6])
b=array([1,2])

我想这没什么奇怪的。然而,当我试图编辑数组中的一个值时(如下所示(:

import numpy as np
a=np.array((1,2))
b=np.array((3,4))
b=a
a[0]=100

我得到:

a=array([100,2])
b=array([100,2])

所以我只是想知道为什么b也在变化?如果我想得到一个结果,我该怎么办:

a=array([100,2])
b=array([1,2])

很抱歉,我对python的基础知识不好,但这个问题真的让我很困惑,我希望有人愿意帮助我解释这一点。提前谢谢。

这真的很简单。让我逐行解释一下:

a=np.array((1,2))

这为对象np.array((1,2))设置了一个pointer,该对象可以通过调用a来访问。b=np.array((3,4))也会发生同样的情况

调用b=a会更改b的指针。它现在指向与a相同的对象。所以现在b等于np.array((1,2))。下一个电话:

a=np.array((5,6))

这会将a的指针更改为指向对象np.array((5,6))。因此CCD_ 11和CCD_ 12不再指向同一事物。

a[0]=100更改ab中的值,因为在这里您更改的是它们都不指向的对象,而不是更改指针本身。

如果您希望避免这种情况,可以创建acopy。例如:

b = np.copy(a)

当您执行=时,您不是在创建新的数组,而是将引用b设置为指向a所指向的同一数组。

下面将通过复制实际创建一个新阵列:

b=numpy.copy(a) 

类似地,如果你想为列表做这件事

b = a[:] 

最新更新