我是python的初学者,并尝试了解数组类型的差异。
在这个例子中,我无法理解最后他们的输出是不同的。为什么代码对两者的行为有所不同?
答案 0 :(得分:0)
numpy
与Python处理列表(数组)的方式不同。 numpy
尝试保持数据缓冲区不变,而不是创建新副本,而Python将创建新对象。当你这样做时:
>>> a = list('1234')
>>> a
['1', '2', '3', '4']
>>> b = a[1:3]
>>> b[0] = 1
>>> b
[1, '3']
>>> a
['1', '2', '3', '4']
修改b
,不会影响a
,因为b = a[1:3]
会创建一个新对象。但是在numpy
中,当你这样做时:
>>> import numpy as np
>>> c = np.array(a)
>>> c
array(['1', '2', '3', '4'])
>>> d = c[1:3]
>>> d
array(['2', '3'])
>>> d[0] = 1
>>> c
array(['1', '1', '3', '4'])
修改d
, 更改了c
,因为d
是视图到c
的同一个缓冲区中正在使用。
(Source)