本当にこれをテストする必要があるかどうかはわかりませんが、もしそうなら…</p>
CPython 2.7 では、これをテストしても意味がありません。要素は任意の順序になります。つまり、最終的に挿入順序と同じ順序になる可能性があり、そうしないように強制する方法はありません。
CPython 3.3-3.5 では、さらに悪化しています。要素は任意の順序になるだけでなく、テストを実行するたびに異なる任意の順序になります。つまり、たまたま機能する可能性があるため、テストが機能しているように見える場合があり3!-1 / 3!
ます。その後、不安定で役に立たないテストをチェックインします。
ただし、CPython 3.6-3.7 では、順序は実際には と似てOrderedDict
いますが、まったく同じではありません。これは、確実にテストできるものがあることを意味します。dict から削除してから挿入すると、古いスロットが再利用されます。もちろん、これは には当てはまりませんOrderedDict
。そう:
>>> d1, d2 = {}, collections.OrderedDict()
>>> for i in range(10):
... d1[i] = d2[i] = i
>>> del d1[2]
>>> del d2[2]
>>> d1[2] = d2[2] = 1000
>>> d1
{0: 0, 1: 1, 2: 1000, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9
>>> d2
OrderedDict([(0, 0),
(1, 1),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8),
(9, 9),
(2, 1000)])
ただし、これはCPython 3.6-3.7の実装の詳細に依存しています。これは、テストしようとしていたことであり、実行していないことのほとんどです。そのテストでそれを行うことは許容されますか?