4 ms·
Python and Ruby both have separate arrays and hashes. They're completely different data structures in both cases. Python's dict type is a hash table like you'd
by samdk 15y ago
Python and Ruby both have separate arrays and hashes. They're completely different data structures in both cases.
Python's dict type is a hash table like you'd expect. Python's list is a pointer-array-backed list. (it may inline ints/similar things--I don't remember if CPython does, and exact details are implementation-dependent), and raw arrays are in the standard library if you need them.
From a very quick check, a list of 100k ints in CPython is ~1.5mb, and a dict of 100k ints -> other ints is ~6mb.
Ruby's hash and array implementations are similar, I think, although I don't know Ruby as well, so I don't know the specifics.
- jeltz 15y agoGood info about Python, but you are incorrect about Ruby. Hashes and arrays are totally different in the Ruby implementations I know of. EDIT: Sorry, I misread you. Ruby MRI and CPython are indeed similar. At least in Ruby MRI (the mainline) arrays are implemented as a struct with a size and a pointer to a normal C array which contains the object references (references in MRI are pointers to object structs which use the lower bits to inline integers of <= 31 or 63 bits, true, false, nil and symbols). Hashes in MRI I have not looked that much into but I believe they are a hash tables which in ruby 1.9 retain insertion order using pointers like a singly linked list.
- masklinn 15y ago> Good info about Python, but you are incorrect about Ruby. Hashes and arrays are totally different in the Ruby implementations I know of. From its context, I'm guessing samdk is saying: > Ruby's hash and array implementations are similar [to Python's dict and list] not that they're similar to one another, which would make absolutely no sense considering his comment starts with: > Python and Ruby both have separate arrays and hashes. so I'd say you agree with him and misread his comment.
- scotty79 15y agoDoes python have standard implementation of odict already? It's nice that Python and Ruby have data structures that trade some features for some memory and/or performance gain.
- masklinn 15y ago> Does python have standard implementation of odict already? Yeppers, since 2.7/3.1: http://docs.python.org/library/collections.html#collections.OrderedDict http://docs.python.org/library/collections.html#collections.... http://docs.python.org/py3k/library/collections.html#collections.OrderedDict http://docs.python.org/py3k/library/collections.html#collect...