"spir" <denis.s...@gmail.com> wrote
Does this mean that the associative arrays representing objects are
implemented like python dicts, thus hash tables?
Yes, in fact I think they are Python dicts - although I've never actually
looked at the source to confirm that.
I was wondering about the question because I guess the constraints
are quite different:
* Dict keys are of any type, including heterogeneous (mixed).
Object keys are names, ie a subset of strings.
The keys must be immutable but ...
the object keys are a perfect subset of the generic dict.
* Object keys are very stable, typically they hardly change;
usually only values change. Dicts often are created empty and fed in a
loop.
The normal case is as you say but you can if you with create an empty
object and then later add attributes - in a loop if you wish.
* Objects are small mappings: entries are explicitely written in code
(*).
Dicts can be of any size, only limited by memory; they are often fed
by computation.
But again the object usage is just a subset of the generic.
* In addition, dict keys can be variables, while object keys rarely
are: they are literal constants (*).
variables in Python are just names that efer to objects.
When you use a variable as a key to a dict you really use
the value of the variable.
d = {}
x = 42
d[x] = 66
d[42]
66
d[x]
66
x = 5
d[x]
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
d[x]
KeyError: 5
It is the value of x that is the key not 'x'. If you change the value of x
it ceases to be a valid key of the dict.
So, I guess the best implementations for objects and dicts may
be quite different. i wonder about alternatives for objects,
They could be different and perhaps optimised but I don't think
they are. Pythons dicts are already pretty efficient. They form
the backbone of almost everything in Python not just objects.
in particuliar trie and variants: http://en.wikipedia.org/wiki/Trie,
because they are specialised for associative arrays which keys are
strings.
PS: Would someone point me to typical hash funcs for string keys,
and the one used in python?
Wikipedia for generic and the source for Python?
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor