On Thu, May 14, 2020 at 2:58 AM Steven D'Aprano <st...@pearwood.info> wrote:

> On Mon, May 11, 2020 at 10:41:06AM -0700, Andrew Barnert via Python-ideas
> wrote:
>
> > I think in general people will expect that a slice view on a sequence
> > acts like “some kind of sequence”, not like the same kind they’re
> > viewing—again, they won’t be surprised if you can’t insert into a
> > slice of a list.
>
> o_O
>
> For nearly 30 years, We've been able to insert into a slice of a list.
> I'm going to be *really* surprise if that stops working.
>

At this point, we're thinking a sequence view would be immutable anyway.
Even for views on immutable objects. So That's a non-issue.

In numpy, there really isn't a view object at all -- there are simply numpy
arrays, and any array *may* share the data block with another array. But
they are both "proper" arrays.

In [20]: import numpy as np


In [21]: A = np.ones((5,))


In [22]: B = A[:]


In [23]: type(A)

Out[23]: numpy.ndarray

In [24]: type(B)

Out[24]: numpy.ndarray

There is a small distinction: in the above case, A "owns" the data block,
but you can only tell if you poke into the flags:

In [27]: A.flags

Out[27]:
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

In [28]: B.flags

Out[28]:
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
And user code very rarely needs to care about that. That flag is mostly
used to manege the memory, and prevent dangerous operations:

In [30]: A.resize((3,4))

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-cd4cee3d5a8d> in <module>
----> 1 A.resize((3,4))

ValueError: cannot resize an array that references or is referenced
by another array in this way.

There are good reasons for ndarrays being able to share data while still
being mutable, but I don't think a "normal" Python seqence_view should be
mutable -- it would lead to a lot of confusion.

-CHB

-- 
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/O7AEPEGMIXNG3J6AHRSVF2ECQ2G75XW7/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to