错误还是特性:使用切片克隆numpy数组

3 投票
1 回答
2474 浏览
提问于 2025-04-16 09:10

接着David Morrissey在“如何在Python中克隆一个列表?”的回答,我在做一些性能测试时,发现了使用numpy数组时的一些意外情况。我知道numpy数组可以/应该通过

clone = numpy.array(original)

或者

clone = numpy.copy(original)

来克隆,但我错误地认为切片也能做到这一点。然而:

In [11]: original = numpy.arange(4)

In [12]: original
Out[12]: array([0, 1, 2, 3])

In [13]: clone = original[:]

In [14]: clone
Out[14]: array([0, 1, 2, 3])

In [15]: clone[0] = 1

In [16]: clone
Out[16]: array([1, 1, 2, 3])

In [17]: original
Out[17]: array([1, 1, 2, 3])

这是否有合理的原因导致这种小小的不一致,还是我应该报告一个bug呢?

1 个回答

11

在numpy中,切片其实是对原始数组的引用或者说是“视图”,而不是复制。这是故意这样设计的,并不是一个错误。原因是,视图比复制更有用。

撰写回答