7
在Python中,內置的收藏比較明確的假設,他們是反身元素:收藏比較是自反的,但不會短路。爲什麼?
在加固元件的反身性,藏品比較假定爲集合元素,則x == x是始終爲真。基於該假設,首先比較元素身份,並且僅對不同元素執行元素比較。
從邏輯上講,這意味着對於任何名單L
,L == L
必須True
。鑑於此,爲什麼實施不檢查身份以使評估短路?
In [1]: x = list(range(10000000))
In [2]: y = list(range(int(len(x)) // 10))
In [3]: z = [1]
# evaluation time likes O(N)
In [4]: %timeit x == x
10 loops, best of 3: 21.8 ms per loop
In [5]: %timeit y == y
100 loops, best of 3: 2.2 ms per loop
In [6]: %timeit z == z
10000000 loops, best of 3: 36.4 ns per loop
顯然,子類可以選擇做一個身份檢查,並明確了身份檢查將增加一個非常小的開銷到每一個這樣的比較。
是否明確作出了一個歷史決定而不是做出這樣的內置序列檢查,以避免這種開支?
我不知道猜測是非常有幫助的。我相信OP也可以猜測。 –
@JohnKugelman:我同意我通常不喜歡發表意見,但OP特意[徵求我的意見](http://stackoverflow.com/questions/38779705/comparison-of-collections-containing-non-reflexive-元件/ 38779764?noredirect = 1個#comment64931217_38779764)。 – unutbu