回答这个问题很好,因为这些评论提高了我对 Python 变量的理解。
正如评论中所指出的,当您使用类似的内容循环遍历列表时for member in my_list
the member
变量绑定到每个连续的列表元素。但是,在循环内重新分配该变量不会直接影响列表本身。例如,以下代码不会更改列表:
my_list = [1,2,3]
for member in my_list:
member = 42
print my_list
Output:
[1,2,3]
如果您想更改包含不可变类型的列表,您需要执行以下操作:
my_list = [1,2,3]
for ndx, member in enumerate(my_list):
my_list[ndx] += 42
print my_list
Output:
[43、44、45]
如果您的列表包含可变对象,您可以修改当前的member
直接对象:
class C:
def __init__(self, n):
self.num = n
def __repr__(self):
return str(self.num)
my_list = [C(i) for i in xrange(3)]
for member in my_list:
member.num += 42
print my_list
[42、43、44]
请注意,您仍然没有更改列表,只是修改列表中的对象。
你可能会从阅读中受益命名和绑定 http://docs.python.org/reference/executionmodel.html#naming-and-binding.