[Tutor] object representation

Steven D'Aprano steve at pearwood.info
Fri Mar 5 02:21:46 CET 2010


On Fri, 5 Mar 2010 01:22:52 am Dave Angel wrote:
> spir wrote:
[...]
> > PS: Would someone point me to typical hash funcs for string keys,
> > and the one used in python?
>
> http://effbot.org/zone/python-hash.htm

But note that this was written a few years ago, and so may have been 
changed.

As for "typical" hash functions, I don't think there is such a thing. I 
think everyone creates there own, unless there is a built-in hash 
function provided by the language or the library, which is what Python 
does. I've seen hash functions as simple as:

def hash(s):
    if not s:  return 0
    else:  return ord(s[0])

but of course that leads to *many* collisions.

Slightly better (but not much!) is

def hash(s):
    n = 0
    for c in s:
        n += ord(c)
    return n % sys.maxint

This is a pretty awful hash function though. Don't use it.

You might also like to read this thread, to get an idea of the thought 
that has been put into Python's hashing:

http://mail.python.org/pipermail/python-dev/2004-April/044244.html


[...]
> I figure every object has exactly three items in it:  a ref count, a
> implementation pointer, and a payload. 

Not quite. CPython has ref counts. IronPython and Jython don't. Other 
Pythons may or may not.

I'm not quite sure what you mean by "implementation pointer" -- I think 
you're talking about a pointer back to the type itself. It's normal to 
just to refer to this as "the type", and ignore the fact that it's 
actually a pointer. The type data structure (which itself will be an 
object) itself is not embedded in every object! And of course, other 
Pythons may use some other mechanism for linking objects back to their 
type.



-- 
Steven D'Aprano


More information about the Tutor mailing list