python - 分配给 slice 有什么意义?

标签 python

我在 pip 源代码中找到了这一行:

sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path

据我了解,上面的行与下面的行相同:

sys.path = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path

有一个区别:在第一种情况下 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

我认为的原因是,在切片赋值的情况下,a 中的对象(对对象的引用)被复制到一个新列表,然后复制回调整大小的 a.

那么使用切片赋值有什么好处呢?

最佳答案

如果对同一个列表有其他引用,并且您希望所有引用都接受更改,则分配给切片很有用。

所以如果你做这样的事情:

bar = [1, 2, 3]
foo = bar
bar[:] = [5, 4, 3, 2, 1]
print(foo)

这将打印 [5, 4, 3, 2, 1]。如果您改为:

bar = [5, 4, 3, 2, 1]
print(foo)

输出将是[1, 2, 3]

关于python - 分配给 slice 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56675075/

相关文章:

python - numpy.random 没有属性 'choice'

python - 使用 `exec` 调用时如何更新局部变量?

python - PyCharm 中 Django 文档字符串中未解析的引用

python - 需要一个金发姑娘正则表达式模式 - 不要太贪婪也不要太自私

python - 按在 Pandas 中开始和结束的日期范围扩展行

python - 将 QMimeData 粘贴到另一个窗口的 QTextEdit

python - 在odoo的act_window xml中调用或添加函数

python字典函数,文本文件

python - 从 python 命令行参数中过滤整数

python - Kivy 中的 "Always on top"窗口