Простой вопрос:
str = ['blah','blah']
for word in str:
word = word * 2
print str
Это просто печатает ['blah', 'blah']. Почему (я знаю, как это сделать, просто интересно, почему это не разрешено)?
Проблема в том, что вы создали новую строку, но не обновили ссылку в списке str. Это означает, что
word = word * 2
влияет на переменное слово, у которого есть новый адрес, и этот адрес (ссылка) не обновляется до списка str. для этого вам необходимо:
str[i] = str[i] * 2
или
word = word * 2
str[i] = word
Когда вы назначаете имя новому значению, оно никогда не изменяет старое значение имени:
word = word * 2
Это принимает значение слова, удваивает его и делает его новым значением слова. Старое значение не изменяется.
В этом случае вы запрашиваете печать объекта массива. Цикл for ничего не делает для значений в массиве.
Потому что для этого нет стандартного средства для языка. То есть вам нужно, чтобы word
был своего рода "указателем" на str[...]
, и в Python такой вещи нет. Кроме того, что, если str
было генератором?