【发布时间】:2020-03-02 21:36:15
【问题描述】:
我通常理解切片在赋值运算符左右的行为方式。
但是,我在 Python (3.8.0) 手册中看到了这一点,并试图弄清楚我缺少什么。
通过将所有元素替换为空列表来清除列表
字母[:] = []
这和letters = [] 有什么不同?
(搜索[:] 并不容易,因为stackoverflow 认为您正在寻找标签。所以,如果已经有答案,我找不到它。)
我看到一些相当不相关的答案。因此,希望清楚起见,问题不在于 [:] 切片的含义,而在于将 empty 列表分配给一个。
【问题讨论】:
-
所以,我想这只是内部内存使用的问题(重用相同的内存而不是创建新列表)。可感知的代码行为没有区别,对吗?
-
@tonypdmtr:如果某个其他变量也指向
letters指向的列表,则存在明显差异。如果你只使用letters =,那么其他变量不会受到影响,但如果你使用letters[:] =,那么通过其他变量可见的值会被修改! -
@JoachimSauer 好的,谢谢,这确实很重要。
-
这种差异最常见的地方是
letters是一个函数参数。然后letters[:] = []将更改传递给函数的参数,但letters = []不会。
标签: python python-3.x