Почему это происходит?Итерация для петли python
Версия 1:
mylist= [1,2,3,4,5]
print mylist
for index, value in enumerate(mylist):
value = 0
print mylist
Вариант 2:
mylist= [[1],[2],[3],[4],[5]]
print mylist
for index, value in enumerate(mylist):
value[0] = 0
print mylist
Выход 1:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
Выход 2:
[[1], [2], [3], [4], [5]]
[[0], [0], [0], [0], [0]]
Я предположил, что обе версии будут создавать локальную переменную и не перезаписывать сам список. Наверное, это не так во второй версии. Я использую python 2.7. Ясно, что я могу иметь другую переменную внутри цикла for, которая создает другую копию значения. Мне просто потребовалось некоторое время, чтобы понять это, и это испортило мою функциональность кода.
Решение:
value = list(value)
[Рациональное улучшение вашего Python: понимание модели выполнения Python] (http://www.jeffknupp.com/blog/2013/02/14/drastically-improve-your-python-understanding-pythons-execution-model/) – delnan