Hacker News new | ask | show | jobs
by bee_rider 635 days ago
Python lists aren’t arrays, right? They are the closest thing in Python to an array maybe, but they do a ton of stuff under the hood, like grow when needed.

Calling them arrays would be very confusing to everybody who expects a typical array: a pointer with some empty space after it.

2 comments

Most languages have arrays that grow automatically. I'd say C/C++ is the exception there.

When I said array, I specifically meant O(1) access, which is in contrast to linked lists, which the name "list" would seem to imply.

C++ has them on the standard library, I would make a clear split with C in this regard.
Yeah and no? Python Lists indeed don't make any sort of array-like guarantee, but they're implemented as a vector/autogrowing-array of python object references (but these objects are not guaranteed to be cache-local).

The implementation defines the underlying data structure as PyObject *ob_item

List access is O(1), which effectively makes them arrays :)
Maybe if you don't consider CPU architecture, but most would expect to be able to do loops over Arrays that don't incur in a lot of cache misses, and Python Lists don't do that, since they're actually arrays of pointers to heap memory.