我在pip来源中找到了这一行:
sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path
Run Code Online (Sandbox Code Playgroud)
据我了解,上面的代码行与下面的代码相同:
sys.path = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path
Run Code Online (Sandbox Code Playgroud)
有一个区别:第一种情况sys.path
仍然指向内存中的同一对象,而第二种情况则sys.path
指向由两个现有对象创建的新列表。
另一件事是,第一种情况比第二种情况慢两倍:
>>> timeit('a[:] = a + [1,2]', setup='a=[]', number=20000)
2.111023200035561
>>> timeit('a = a + [1,2]', setup='a=[]', number=20000)
1.0290934000513516
Run Code Online (Sandbox Code Playgroud)
我认为原因是在切片分配的情况下,来自的对象a
(对对象的引用)被复制到新列表中,然后再复制回到调整后的大小中a
。
那么使用分片分配有什么好处?
python ×1