It certainly doesn’t help that they’re called lists, although they do 
technically satisfy the definition of the “list” abstract data type: 
http://en.wikipedia.org/wiki/List_(abstract_data_type)

I personally think the abstract list definition is so loose as to be almost 
useless, but it is popular with many folks in the Python community: 
https://twitter.com/luispedrocoelho/status/408236536866828288

— John

On Aug 5, 2014, at 8:59 PM, Stefan Karpinski <[email protected]> wrote:

> The (incorrect) idea that Python's "lists" are not contiguous memory arrays 
> seems to be somewhat widespread. I'm not sure where it comes from – maybe 
> they used have a different implementation, or maybe its just the unfortunate 
> insistence on calling them lists rather than arrays.
> 
> 
> On Tue, Aug 5, 2014 at 11:57 PM, John Myles White <[email protected]> 
> wrote:
> For future reference, Jason’s interpretation of Python lists was completely 
> accurate: https://docs.python.org/2/faq/design.html#how-are-lists-implemented
> 
>  — John
> 
> On Aug 5, 2014, at 4:08 AM, Neal Becker <[email protected]> wrote:
> 
> > Thanks.  I don't think that's really equivalent though.  I believe python's 
> > list
> > is not contiguous, and can efficiently handle insertions and deletions, 
> > both at
> > the ends and in the middle.  Julia's array is a contiguous dense array, 
> > correct?
> >
> > Jason Merrill wrote:
> >
> >>  julia> {}
> >>  0-element Array{Any,1}
> >>
> >> is like python's arrays in that it can hold values of heterogenous types,
> >> and you can grow it with push!, e.g.
> >>
> >>  julia> a = {}
> >>  0-element Array{Any,1}
> >>
> >>  julia> push!(a, "grapes")
> >>  1-element Array{Any,1}:
> >>   "grapes"
> >>
> >>  julia> push!(a, 3)
> >>  2-element Array{Any,1}:
> >>    "grapes"
> >>    3
> >>
> >> If you know the type of all the things you'll be putting in your container,
> >> you will get better performance/memory efficiency with a typed array.
> >>
> >> julia> b = Float64[]
> >> 0-element Array{Float64,1}
> >>
> >> julia> push!(b, 1.0)
> >> 1-element Array{Float64,1}:
> >> 1.0
> >>
> >> julia> push!(b, NaN)
> >> 2-element Array{Float64,1}:
> >>   1.0
> >> NaN
> >>
> >> I think in either case, Julia is smart about growing the array by the right
> >> amount at the right time to get O(1) ammortized push!(), but if you have a
> >> guess about the eventual size of your array, you can help Julia out with
> >> `sizehint`.
> >>
> >> julia> sizehint(b, 100000)
> >>
> >> You don't have to be exactly right with sizehint--the worst that will
> >> happen is that you will use a little more memory than you needed to, or the
> >> array will have to be dynamically grown more often than it had to be. For
> >> this, I am most grateful. In Matlab, your choices are, AFAICT, 1) know the
> >> exact size of your container correctly ahead of time, 2) have terrible
> >> performance, or 3) allocate something that's definitely bigger than you
> >> need, and then keep track of how much of it you've used yourself and throw
> >> away the excess at the end.
> >>
> >>
> >> On Monday, August 4, 2014 4:16:27 PM UTC-7, Neal Becker wrote:
> >>>
> >>> What would be similar to python list type?  A container that has an
> >>> efficient
> >>> append.  A common use is construct an empty list, then grow it by calling
> >>> append.
> >>>
> >>>
> >
> >
> 
> 

Reply via email to