title: Contrary to Python 3.1 Docs, hash(obj) != id(obj). So which is correct?
body: <p>The following is from the Python v3.1.2 documentation:</p>
  
  <p>From The Python Language Reference Section 3.3.1 Basic Customization:</p>
  
  <pre><code>object.__hash__(self)
  
  ... User-defined classes have __eq__() and __hash__() methods 
  by default; with them, all objects compare unequal (except
  with themselves) and x.__hash__() returns id(x).
  </code></pre>
  
  <p>From The Glossary:</p>
  
  <pre><code>hashable
  
  ... Objects which are instances of user-defined classes are 
  hashable by default; they all compare unequal, and their hash 
  value is their id().
  </code></pre>
  
  <p>This is true up through version 2.6.5:</p>
  
  <pre><code>Python 2.6.5 (r265:79096, Mar 19 2010 21:48:26) ...
  ...
  &gt;&gt;&gt; class C(object): pass
  ...
  &gt;&gt;&gt; c = C()
  &gt;&gt;&gt; id(c)
  11335856
  &gt;&gt;&gt; hash(c)
  11335856
  </code></pre>
  
  <p>But in version 3.1.2:</p>
  
  <pre><code>Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) ...
  ...
  &gt;&gt;&gt; class C: pass
  ...
  &gt;&gt;&gt; c = C()
  &gt;&gt;&gt; id(c)
  11893680
  &gt;&gt;&gt; hash(c)
  743355
  </code></pre>
  
  <p>So which is it? Should I report a documentation bug or a program bug?
  And if it's a documentation bug, and the default <code>hash()</code> value for a user
  class instance is no longer the same as the <code>id()</code> value, then it would be 
  interesting to know what it is or how it is calculated, and why it was
  changed in version 3.</p>