已经在这里的解释是正确的。但是,由于我想以类似的方式滥用 python,我将提交此方法作为解决方法。
从列表中调用特定元素直接返回列表中该元素的值的副本。即使复制列表的子列表也会返回对包含值副本的数组的新引用。考虑这个例子:
>>> a = [1, 2, 3, 4]
>>> b = a[2]
>>> b
3
>>> c = a[2:3]
>>> c
[3]
>>> b=5
>>> c[0]=6
>>> a
[1, 2, 3, 4]
b
仅值副本和c
从 复制的子列表都a
不能更改 中的值a
。尽管它们有共同的起源,但没有联系。
但是,numpy 数组使用“原始”内存分配并允许返回数据视图。视图允许以不同的方式表示数据,同时保持与原始数据的关联。因此,一个工作示例是
>>> import numpy as np
>>> a = np.array([1, 2, 3, 4])
>>> a
array([1, 2, 3, 4])
>>> b = a[2]
>>> b
3
>>> b=5
>>> a
array([1, 2, 3, 4])
>>> c = a[2:3]
>>> c
array([3])
>>> c[0]=6
>>> a
array([1, 2, 6, 4])
>>>
虽然提取单个元素仍然仅按值复制,但维护 element 的数组视图2
会引用 的原始元素2
(a
尽管它现在是 的元素0
)c
,并且对c
' 的值所做的更改也会更改a
。
Numpyndarray
有许多不同的类型,包括通用对象类型。这意味着您可以为几乎任何类型的数据维护这种“按引用”行为,而不仅仅是数值。