【发布时间】:2015-11-07 03:38:39
【问题描述】:
亲爱的 StackOverFlow, 我刚开始学习python,在循环列表方面我有点困惑。我一直在使用 Python.org 的官方 python 教程来学习。在此页面https://docs.python.org/2/tutorial/controlflow.html 的第 4.2 节中,在最后一个示例中,他们编写了以下代码:
for w in words[:]:
if len(w) > 6:
words.insert(0, w)
让我困惑的部分是for w in words[:]: 也许我需要更好地阅读他们的描述,但我似乎无法弄清楚为什么
前面的代码有效,而这无效:for w in words:。我想这让我很困惑,因为当我在解释器中输入 words[:] 时,当我在解释器中输入 words 时会得到相同的结果。如果您能对这个话题有所了解,我将不胜感激。
【问题讨论】:
-
words[:]创建列表的副本。它是一个新的、独特的对象。当您插入原始列表时,它不会改变。见How to clone or copy a list in Python? -
我会澄清它的长度和它指向的地址不会改变,但如果复制的
list包含其他可变对象(如lists),整体内容可能会改变。