So what's happening here?

Todd toddrjen at gmail.com
Fri Jun 5 09:39:35 EDT 2015


On Fri, Jun 5, 2015 at 3:23 PM, Gary Herron <gary.herron at islandtraining.com>
wrote:

> On 06/05/2015 06:11 AM, Paul Appleby wrote:
>
>> On Fri, 05 Jun 2015 14:55:11 +0200, Todd wrote:
>>
>>  Numpy arrays are not lists, they are numpy arrays. They are two
>>> different data types with different behaviors.  In lists, slicing is a
>>> copy.  In numpy arrays, it is a view (a data structure representing some
>>> part of another data structure).  You need to explicitly copy the numpy
>>> array using the "copy" method to get a copy rather than a view:
>>>
>> OK, thanks.  I see.
>>
>> (I'd have thought that id(a[1]) and id(b[1]) would be the same if they
>> were the same element via different "views", but the id's seem to change
>> according to rules that I can't fathom.)
>>
> Nope.  It's odder than that.  a[1] is still a view into the inderlying
> numpy array, and your id is the id of that view. Each such index produces a
> new such view object.  Check this out:
>
> >>> import numpy
> >>> a = numpy.array([1,2,3])
> >>> id(a[1])
> 28392768
> >>> id(a[1])
> 28409872
>
> This produces two different view of the same underlying object.
>

a[1] and b[1] are not views:

>>> a[1].flags['OWNDATA']
True
>>> b[1].flags['OWNDATA']
True
>>> a[1:2].flags['OWNDATA']
False
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20150605/0a7efc01/attachment.html>


More information about the Python-list mailing list