遵循David Morrissey关于“如何在python中克隆列表? ”的回答。’我正在运行一些性能测试,并在使用numpy数组时遇到意外行为。我知道可以/应该克隆一个numpy数组w /
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])
是否存在这种轻微不一致的充分原因,还是应该提交错误?
在numpy中,切片是原始数组上的引用或“视图”,因此它们不是副本。那是设计使然,而不是错误。原因是副本不如视图有用。