爲什麼執行者會選擇將sys.path
列入列表中而不是有序集?sys.path爲什麼是一個列表?
將sys.path
列爲一個列表會導致在路徑中有多個副本,從而減慢模塊的搜索時間。
一個人爲的例子是下面的傻例如
# instant importing
import os
import sys
for i in xrange(50000):
sys.path.insert(0, os.path.abspath(".")
# importing takes a while to fail
import hello
要從意見和答案總結給出:
它從下面的反應似乎是一個列表是一個簡單的結構,處理99%每個人的需求,它沒有避免重複的安全功能,但它確實帶有原始優先級,它是列表中元素的索引,您可以通過預先設置輕鬆設置最高優先級,或通過附加優先級設置最低優先級。
添加更豐富的優先級,即在此元素之前插入很少使用,因爲這樣的界面對於簡單任務來說將花費太多精力。正如接受的答案所述,對於涵蓋這些額外用例的任何更高級的內容,並不存在實際需要,因爲歷史上人們習慣於此。
但順序很重要...('集合'是無序的)。 –
不知道我關注...爲什麼要把它作爲一個列表創建重複? – grail
當然,在列表中可能有重複項,但是這會成爲您在添加之前未檢查的錯。另外,這是一個很小的問題。考慮一下* nix也沒有發現需要從「PATH」中刪除重複50年。保持簡單可以保持速度。 – pbuck