通过索引或切片进行 Numpy 值分配,重复内存分配?

Numpy value assignment by indexing or slicing, duplicate memory allocation?

import numpy as np
a = np.array([0.,0.,0.,0.])
b = a
c = a
d = a.copy()

a[0] = 2.
print(a)
print(b)
print(c)
print(d)

结果是[2. 0. 0. 0.] for ALL a,b and c,这很奇怪。 d 仍然正确地将值保留为零。

这是有意为之的行为吗?

是的,这是预期的行为,因为所有 abc 在内存中本质上都是相同的 python 对象,可以通过简单地轻松验证检查 a is b 等等

只有 d 在内存中分配了 a 的单独副本。

>>> import numpy as np
>>> a = np.array([0.,0.,0.,0.])
>>> b = a
>>> c = a
>>> d = a.copy()
>>> a is b
True
>>> b is c
True
>>> c is a
True
>>> a is d
False