Okay, we&#x27;re talking about the same thing. As the documentation points out:<p>&gt; If items(), keys(), values(), iteritems(), iterkeys(), and itervalues() are called with no intervening modifications to the dictionary, the lists will directly correspond.<p>If you restart Python, you have broken the correspondence.<p>You&#x27;ll note that either the documentation is incomplete or your interpretation is incorrect, as the most recent versions of 2.6 and 2.7 will use a randomized hash table when the -R flag is enabled:<p><pre><code>    % ~&#x2F;Python-2.7.10&#x2F;python.exe -R x.py
    {&#x27;M&#x27;: 77, &#x27;L&#x27;: 76, &#x27;O&#x27;: 79, &#x27;N&#x27;: 78, &#x27;I&#x27;: 73, &#x27;H&#x27;: 72,
     &#x27;K&#x27;: 75, &#x27;J&#x27;: 74, &#x27;E&#x27;: 69, &#x27;D&#x27;: 68, &#x27;G&#x27;: 71, &#x27;F&#x27;: 70,
     &#x27;A&#x27;: 65, &#x27;C&#x27;: 67, &#x27;B&#x27;: 66, &#x27;Y&#x27;: 89, &#x27;X&#x27;: 88, &#x27;Z&#x27;: 90,
     &#x27;U&#x27;: 85, &#x27;T&#x27;: 84, &#x27;W&#x27;: 87, &#x27;V&#x27;: 86, &#x27;Q&#x27;: 81, &#x27;P&#x27;: 80,
     &#x27;S&#x27;: 83, &#x27;R&#x27;: 82}
    % ~&#x2F;Python-2.7.10&#x2F;python.exe -R x.py
    {&#x27;Z&#x27;: 90, &#x27;Y&#x27;: 89, &#x27;X&#x27;: 88, &#x27;W&#x27;: 87, &#x27;V&#x27;: 86, &#x27;U&#x27;: 85,
     &#x27;T&#x27;: 84, &#x27;S&#x27;: 83, &#x27;R&#x27;: 82, &#x27;Q&#x27;: 81, &#x27;P&#x27;: 80, &#x27;O&#x27;: 79,
     &#x27;N&#x27;: 78, &#x27;M&#x27;: 77, &#x27;L&#x27;: 76, &#x27;K&#x27;: 75, &#x27;J&#x27;: 74, &#x27;I&#x27;: 73,
     &#x27;H&#x27;: 72, &#x27;G&#x27;: 71, &#x27;F&#x27;: 70, &#x27;E&#x27;: 69, &#x27;D&#x27;: 68, &#x27;C&#x27;: 67,
     &#x27;B&#x27;: 66, &#x27;A&#x27;: 65}
</code></pre>
I can totally understand how people expect an invariant order. As I pointed out, our regression code broke in the 2.x series because we relied on consistent ordering, and CPython never made that promise. But what I quoted above is the only guarantee about dictionary order. Everything else is an implementation accident.<p>Nor is it the only such implementation-specific behavior that people sometimes depend on.<p><pre><code>  &gt;&gt;&gt; for c in &quot;This is a test&quot;:
  ...   if c is &quot;i&quot;: print &quot;Got one!&quot;
  ... 
  Got one!
  Got one!
</code></pre>
That&#x27;s under CPython, where single character strings with chr(c)&lt;256 use an intern table. Pypy doesn&#x27;t print anything because it doesn&#x27;t use that mechanism.<p>Note that &#x27;is&#x27; testing is also faster:<p><pre><code>    % python -mtimeit -s &#x27;s=&quot;testing 1, 2, 3.&quot;*1000&#x27; &#x27;sum(1 for c in s if c is &quot;t&quot;)&#x27;
    1000 loops, best of 3: 893 usec per loop
    % python -mtimeit -s &#x27;s=&quot;testing 1, 2, 3.&quot;*1000&#x27; &#x27;sum(1 for c in s if c == &quot;t&quot;)&#x27;
    1000 loops, best of 3: 1.01 msec per loop
</code></pre>
This extra 10% is sometimes attractive.