为什么执行者会选择将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