这是从链接中引用的: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"] 是如何附加到原始颜色列表的? 这是因为执行附加操作的行是指原始列表而不是副本列表。
