回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我最近从Python2.7切换到Python3.3,似乎在Python2中,字典键的顺序是任意的,但是是一致的,在Python3中,用<a href="https://docs.python.org/3/library/functions.html#vars" rel="noreferrer">^{<cd1>}</a>等方法获得的字典键的顺序似乎是不确定的。</p>
<p>如果我跑:</p>
<pre><code>class Test(object): pass
parameters = vars(Test)
print(list(parameters.keys()))
</code></pre>
<p>在Python2.7和Python3.3中,然后:</p>
<ul>
<li><p>Python 2.7一直给我</p>
<pre><code>['__dict__', '__module__', '__weakref__', '__doc__']
</code></pre></li>
<li><p>使用Python3.3,我可以获得任意随机顺序—例如:</p>
<pre><code>['__weakref__', '__module__', '__qualname__', '__doc__', '__dict__']
['__doc__', '__dict__', '__qualname__', '__module__', '__weakref__']
['__dict__', '__module__', '__qualname__', '__weakref__', '__doc__']
['__weakref__', '__doc__', '__qualname__', '__dict__', '__module__']
</code></pre></li>
</ul>
<p>这种非决定论从何而来?为什么</p>
<pre><code>list({str(i): i for i in range(10)}.keys())
</code></pre>
<p>…每次跑步之间保持一致,总是给予</p>
<pre><code>['3', '2', '1', '0', '7', '6', '5', '4', '9', '8']
</code></pre>
<p>?</p>