[Tutor] object representation

Alan Gauld alan.gauld at btinternet.com
Thu Mar 4 09:50:53 CET 2010


"spir" <denis.spir at 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/ 




More information about the Tutor mailing list