我在 Python 上尝试了以下代码,这就是我得到的: 似乎对于我尝试通过更改 elem 对 iterables 进行的许多更改,它不起作用。
lis = [1,2,3,4,5]
for elem in lis:
elem = 3
print lis
[1, 2, 3, 4, 5]
但是,如果可迭代对象是具有自己方法的对象(如列表),则可以在 for 循环中修改它们。
lis = [[1],[2]]
for elem in lis:
elem.append(8)
print lis
[[1, 8], [2, 8]]
在 for
循环中,'elem' 术语到底是什么?提前致谢!
最佳答案
这不起作用的原因是因为您误解了 elem
是什么。它不是对象本身,甚至称它为“变量”也不正确。
它是一个名称,有点像标签,指向对象。如果你只是直接赋值给它,你只是覆盖这个名字以指向别的东西。但是,您仍然拥有对列表的原始引用,因此为 elem
分配不同的值不会修改 lis
本身。
现在,在这种情况下,由于 elem
指向的所有对象都是整数,您甚至根本无法更改它们 - 因为整数(以及许多其他类型,如字符串或元组)是不可变的。这意味着,简单地说,一旦创建了对象,就不能对其进行修改。这与它们是否“有方法”无关(所有 Python 对象都有方法,包括整数),而是它们是否不可变。
然而,有些对象是可变的,这意味着它们可以被改变。列表是此类对象的示例。在您的第二个示例中,elem
是一个引用 lis
中包含的 list 对象的名称,这些对象本身是可变的。这就是为什么就地修改它们(使用 .append()
或 .remove()
等)工作正常的原因。
关于python - Python如何迭代一个for循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785490/