当您执行时c = a[b]
,a.__get_item__
会以b
将其作为唯一参数进行调用,并将返回的所有内容分配给c
。
当您执行时a[b] = c
,a.__setitem__
使用b
和c
作为参数调用,并且返回的所有内容都会被静默丢弃。
因此,尽管具有相同的a[b]
语法,但是两个表达式在做的事情都不同。您可以子类化ndarray
,重载这两个函数,并使它们的行为不同。在numpy中,默认情况下,前者返回一个副本(如果b
是数组),但后者会a
在适当位置进行修改。