On Thu, Feb 20, 2020 at 02:19:13PM -0800, Stephan Hoyer wrote:

> > > Strong +1 for an array.zeros() constructor, and/or a lower level
> > array.empty() which doesn't pre-fill values.
> >
> > So it'd be a shorthand for something like this?
> >
> > >>> array.array("i", bytes(64))
> > array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
> >
> > It'd be convenient to specify the size as a number of array elements
> > rather than bytes. But I'm not a heavy user of array.array() so I
> > won't say either way as to whether this is needed.
> 
> 
> Yes, exactly.
> 
> The main problem with array.array("i", bytes(64)) is that memory gets
> allocated twice, first to create the bytes() object and then to make the
> array(). This makes it unsuitable for high performance applications.

Got some actual measurements to demonstrate that initialising the array 
is a bottleneck? Especially for something as small as 64, it seems 
unlikely. If it were 64MB, that might be another story.

What's wrong with `array.array("i", [0])*64` or equivalent?

On my machine, at least, constructing a bytes object first followed by 
an array is significantly faster than the alternative:

[steve@ando cpython]$ ./python -m timeit -s "from array import array" 
"array('i', bytes(500000))"
100 loops, best of 5: 1.71 msec per loop

[steve@ando cpython]$ ./python -m timeit -s "from array import array" 
"array('i', [0])*500000"
50 loops, best of 5: 7.48 msec per loop

That surprises me and I cannot explain it.



-- 
Steven
_______________________________________________
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/OFUQN3H4D5UEFNEFHUZSKIB7UR3X2N65/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to