[Numpy-discussion] immutable numpy arrays
Wed Dec 17 17:45:46 CST 2008
On Wed, Dec 17, 2008 at 3:34 PM, Robert Kern <email@example.com> wrote:
> On Wed, Dec 17, 2008 at 16:51, Geoffrey Irving <firstname.lastname@example.org> wrote:
>> On Wed, Dec 17, 2008 at 2:24 PM, Robert Kern <email@example.com> wrote:
>>> On Wed, Dec 17, 2008 at 15:52, Geoffrey Irving <firstname.lastname@example.org> wrote:
>>>> Currently numpy arrays are either writable or unwritable, but
>>>> unwritable arrays can still be changed through other copies. This
>>>> means that when a numpy array is passed into an interface that
>>>> requires immutability for safety reasons, a copy always has to be
>>>> One way around this would be to add a NPY_IMMUTABLE flag signifying
>>>> that the contents of the array will never change through other copies.
>>> This is not possible to guarantee. With the __array_interface__, I can
>>> make a numpy array point at any addressable memory without its
>>> knowledge. We can even mutate "immutable" str objects, too.
>> In python __array_interface__ just returns a big integer representing
>> a pointer which can't be used for anything.
> I can (and do) *make* an array from Python given an
> __array_interface__ with that pointer. See numpy/lib/stride_trick.py
> in numpy 1.2 for an example.
Ah. Yes, that certainly precludes complete safety.
I don't think it precludes the usefulness of an immutable flag though,
just like it doesn't preclude the usefulness of the writeable flag.
The stride_tricks.py code is already well-behaved: it doesn't turn
unwriteable arrays into writeable arrays. It certainly could, but
this is analogous to ctypes or untrusted C code.
More information about the Numpy-discussion