[Numpy-discussion] immutable numpy arrays

Geoffrey Irving irving@naml...
Wed Dec 17 17:45:46 CST 2008


On Wed, Dec 17, 2008 at 3:34 PM, Robert Kern <robert.kern@gmail.com> wrote:
> On Wed, Dec 17, 2008 at 16:51, Geoffrey Irving <irving@naml.us> wrote:
>> On Wed, Dec 17, 2008 at 2:24 PM, Robert Kern <robert.kern@gmail.com> wrote:
>>> On Wed, Dec 17, 2008 at 15:52, Geoffrey Irving <irving@naml.us> 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
>>>> made.
>>>>
>>>> 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.

Geoffrey


More information about the Numpy-discussion mailing list