【发布时间】:2017-06-28 19:12:09
【问题描述】:
为什么在切片方面numpy.array 的行为与 Python 的列表和默认数组不同?请考虑以下示例:
1)使用列表:语句b = a[1:3]创建一个新的列表对象,修改b不会修改a。
>>> a = [1,2,3,4]
>>> b = a[1:3]
>>> print(b)
[2, 3]
>>> b[0] = -17
>>> print(b)
[-17, 3]
>>> print(a)
[1, 2, 3, 4]
2)使用array.array:语句b = a[1:3]再次创建一个新的数组对象,修改b不会修改a。
>>> import array
>>> a = array.array('i', [1,2,3,4])
>>> b = a[1:3]
>>> print(b)
array('i', [2, 3])
>>> b[0] = -17
>>> print(b)
array('i', [-17, 3])
>>> print(a)
array('i', [1, 2, 3, 4])
3) 使用numpy.array:语句b = a[1:3] 似乎引用了原始列表的值,修改它也确实修改了a!
>>> import numpy
>>> a = numpy.array([1,2,3,4])
>>> b = a[1:3]
>>> print(b)
[2 3]
>>> b[0] = -17
>>> print(b)
[-17 3]
>>> print(a)
[ 1 -17 3 4]
问题是:为什么numpy 中会出现这种行为?
【问题讨论】: