Class _arraymethod in ma.core is a descriptor, yet mutable.
This leads to "interesting" behaviour:
>>> from numpy.ma.core import MaskedArray >>> import numpy as np >>> z = np.zeros(5) >>> z array([ 0., 0., 0., 0., 0.]) >>> o = np.ones(5) >>> o array([ 1., 1., 1., 1., 1.]) >>> mz = MaskedArray(z) >>> mz masked_array(data = [ 0. 0. 0. 0. 0.], mask = False, fill_value = 1e+20) >>> mo = MaskedArray(o) >>> mo masked_array(data = [ 1. 1. 1. 1. 1.], mask = False, fill_value = 1e+20) >>> mocopy = mo.copy >>> mocopy() masked_array(data = [ 1. 1. 1. 1. 1.], mask = False, fill_value = 1e+20) >>> mz.copy <numpy.ma.core._arraymethod object at 0x29fff10> >>> mocopy() masked_array(data = [ 0. 0. 0. 0. 0.], mask = False, fill_value = 1e+20) >>> mo.copy <numpy.ma.core._arraymethod object at 0x29fff10> >>> mocopy() masked_array(data = [ 1. 1. 1. 1. 1.], mask = False, fill_value = 1e+20)