On Wed, Dec 17, 2008 at 3:34 PM, Robert Kern <robert.k...@gmail.com> wrote: > On Wed, Dec 17, 2008 at 16:51, Geoffrey Irving <irv...@naml.us> wrote: >> On Wed, Dec 17, 2008 at 2:24 PM, Robert Kern <robert.k...@gmail.com> wrote: >>> On Wed, Dec 17, 2008 at 15:52, Geoffrey Irving <irv...@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 _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion