a = b,并且当更改时,b仍等于a吗?

时间:2018-12-06 11:10:10

标签: python

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

SELECT MAX(ROWTIME),TIMESTAMPTOSTRING(ROWTIME, 'yyyy-MM-dd HH:mm:ss'),SERIAL,COUNT FROM MY_STREAM WHERE TIMESTAMPTOSTRING(ROWTIME, 'yyyy-MM-dd HH:mm:ss') >= DATE AND TIMESTAMPTOSTRING(ROWTIME, 'yyyy-MM-dd HH:mm:ss') <= DATE2 GROUP BY SERIAL,COUNT LIMIT 20;

我得到的是:

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

我认为这并不奇怪。 但是,当我尝试编辑a数组(如下所示)中的值之一时:

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

所以我只是想知道为什么b也要改变? 以及如果我想获得结果该怎么办:

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

对不起,我对python的基本了解并不好,但是这个问题确实使我感到困惑,我希望有人愿意帮助我解释这一点。 预先感谢。

2 个答案:

答案 0 :(得分:0)

当您执行=时,您并没有创建新的数组,而只是将引用b设置为指向a所指向的同一数组。 / p>

下面将通过复制实际创建一个新数组:

b=numpy.copy(a) 

类似地,如果您想为列表做

b = a[:] 

答案 1 :(得分:0)

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

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

这为对象pointer设置了np.array((1,2)),可以通过调用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))。因此ab不再指向同一事物。

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

如果您希望避免这种情况,可以创建copy中的a。例如:

b = np.copy(a)