内部的区别在于:a[1:] -= a[:-1]
相当于这样:a[1:] = a[1:].__isub__(a[:-1])
a.__setitem__(slice(1, None, None), a.__getitem__(slice(1, None, None)).__isub__(a.__getitem__(slice(1, None, None)))
而这个:b[1:] = b[1:] - b[:-1]
映射到这个:b[1:] = b[1:].__sub__(b[:-1])
b.__setitem__(slice(1, None, None), b.__getitem__(slice(1, None, None)).__sub__(b.__getitem__(slice(1, None, None)))
在某些情况下,__sub__()并__isub__()以类似的方式工作。但是可变对象应该在使用时进行变异和返回__isub__(),而它们应该返回一个新的对象__sub__()。
在numpy对象上应用slice操作可以在它们上创建视图,因此直接使用它们可以访问“原始”对象的内存。