我知道,由于以下原因:
a=1
b=a
a=4
它将1
分配给a
,然后a
分配给b
,最后一步是将a
的值更改为4
这里,一旦a
的值更改为4
,则b
的值不会有任何更改
同样适用于
a=np.array([10,20,30,40,50,60])
b=a[2]
a[2]=100
代码末尾的b
值将是20
,它是初始的a[2]
但当你有一些事情,如下面所述:
a=np.array([10,20,30,40,50,60])
b=a[0:2]
如果我们改变a[0:2]=[100,200]
,那么b
的值也会自动改变。这就像变量b
以某种方式与其他变量相关联(这与之前的情况不同)。
我知道如果代码被写成b=a[0:2].copy()
,那么b
就不会改变,即使a
被改变了
所以我的问题是,如果我不想更改后一个变量,因为在前两种情况下没有必要,那么我应该在哪里使用这个.copy()
方法
谢谢你的帮助
第一,;第二种情况是,为
b
指定了一个值(标量)在第三种情况下,您已经基于
a
的切片0:2
向b
分配了一个view(请参见basic-slicing-and-indexing)。这本质上是对a
的某些元素的多值引用(即:b[0]
实际上指的是a[0]
)。换句话说,b
不拥有它的数据,但是将指向a
中的数据。因此,当更改a
时,b
只反映这些更改,因为它指向非常相同的元素通常,当您要将副本与原始副本分离时,应使用numpy
copy()
,例如:a
或b
的标志时(例如,从C连续到F连续,通常也是出于速度原因)李>关于您在评论中提出的问题,“是否有任何方法可以确定变量是否相互关联”:是的。每个numpy数组都有
flags
:相关问题 更多 >
编程相关推荐