为什么实施者会选择将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%的每个人需求的简单结构,它没有避免重复的安全功能,但是它确实带有原始优先级,即列表中元素的索引,您可以通过附加前置或最低优先级轻松设置最高优先级。
添加更丰富的优先级,即在此元素之前插入很少用作接口,这对于简单的任务来说太费力了。正如已接受的答案所述,对于这些额外用例的任何更高级的内容都没有实际需要,因为历史上已经习惯了人们。
答案 0 :(得分:2)
sys.path
指定搜索路径。通常,搜索路径按照指示搜索顺序的项目的顺序排序。如果sys.path
是set
,那么就没有明确的排序方式会使sys.path
变得不那么有用。同样值得考虑的是优化是一个棘手的问题。解决任何性能问题的合理优化是简单地保留已搜索的sys.path
元素的记录。尝试使用有序集合变得棘手可能不值得付出努力。
答案 1 :(得分:2)
sys.path
进行操作 - 检查确切的路径是否在sys.path
- 更不用说了,快点做到这一点sys.path
的典型用例是那些完全用于列表的用例:按顺序尝试元素,预先添加或附加一个总而言之,既有历史原因,又缺乏实际需要。