Гы. Как я понимаю то что назвается массивом (Array) должно быть массивом, т.е. обладать соответствующими временными и функциональными характеристиками. Аналогично со списками. Думаю создатели Ruby в курсе :)
Посмотрел реализацию Array в Ruby и list в python. Особо не въезжал, но как и ожидал - Array в Ruby это массив. Шокировало другое - list в python тоже реализован как массив :) Ужос, и нафига так измываться над сложившейся терминологией ?
Я в питоне не секу вообще. Писал несколько хеловордов, да доку поперек просматривал, но если ты про "5.6 array -- Efficient arrays of numeric values " из Python Library Reference, то его необходимость вполне понятна. array хранит непосредственно значения, а list - указатели на PyObject-ы. Именно поэтому все элементы array должны быть одного типа, а list могут быть разного. Видимо у них и семантика оператора присваивания для элементов немного разная. Да и вообще list более медленный и более прожорливый по памяти.
Ну хотяб тем что операция добавления, вставки и удаления тут будут гораздо более ресурсоемкими, чем в обычном списке. Я понимаю, что при использовании Ruby за производительностью никто особо не гонится, но как-то неприято использовать массив, там где естественнее будет логичнее использовать список.
Массив указателей, как я понял. Вот такой http://www.brpreiss.com/books/opus7/html/page82.html
Ну и собственно реализация
typedef struct {
PyObject_VAR_HEAD
/* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
PyObject **ob_item;
/* ob_item contains space for 'allocated' elements. The number
* currently in use is ob_size.
* Invariants:
* 0 <= ob_size <= allocated
* len(list) == ob_size
* ob_item == NULL implies ob_size == allocated == 0
* list.sort() temporarily sets allocated to -1 to detect mutations.
*
* Items must normally not be NULL, except during construction when
* the list is not yet visible outside the function that builds it.
*/
Py_ssize_t allocated;
} PyListObject;