Skip to main content
 首页 » 编程设计

python之如何在 python 列表中使用切片运算符避免 for 循环中的副作用

2025年05月04日16telwanggs

这是从链接中引用的:http://www.python-course.eu/for_loop.php - 为避免这些副作用,最好使用切片运算符处理副本,如下例所示:

colours = ["red"] 
for i in colours[:]: 
    if i == "red": 
        colours += ["black"] 
    if i == "black": 
        colours += ["white"] 
print colours 

输出是:

['red', 'black'] 

我的问题是:语句 colours[:] 是否复制了颜色列表并且 for 循环在副本而不是原始列表上工作?如果是这样,那么 ["balck"] 是如何附加到原始颜色列表的?

请您参考如下方法:

语句 colours[:] 是否复制颜色列表:是。

并且 for 循环适用于副本而不是原始列表?是的,但请注意“适用于”的含义。变量 i 从列表 colours 的副本中获取其值。但是,对 colours 的引用(例如 colours += ["black"] 行中的引用)指的是原始列表。这正是代码想要的,所以它可以工作。

如果是这样,那么 ["balck"] 是如何附加到原始颜色列表的? 这是因为执行附加操作的行是指原始列表而不是副本列表。