小编eku*_*ser的帖子

切片的分配点是什么?

我在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
推荐指数
1
解决办法
59
查看次数

标签 统计

python ×1