Назначение в цикле создаст новое имя i
внутри for
, которое теряет свое значение после каждой итерации.
На самом деле это не так. Вы можете есть эффект замеченным, если вы имели дело с изменяемых подструктур, которые могут быть изменены на месте, то есть:
l = [[1], [2]]
for i in l:
i.append(2)
изменения будут отражены соответственно (суб-список будет получить 2
прилагаемыми к их).
в вашем случае, однако, у вас есть str
s, которые являются неизменяемыми объектами. i.capitalize()
, действуя на экземпляр str
, создаст новую копию значения, которое будет присвоено, а затем потеряно. Это не повлияет на объекты внутри списка.
Значение i
в for i in container:
действительно относится к объектам, содержащимся в последовательности. Когда вы назначаете i
на результат i.capitalize()
, имя i
теперь будет ссылаться на новый возвращенный возвращенный экземпляр.
Не пытайтесь рисовать параллели между C++
и Python
, я знаю, что это иногда облегчает обучение, но в другое время может привести вас в замешательство.
Обязательное примечание: не используйте list
в качестве имени, оно маскирует встроенное имя list
.
Поскольку это не обновляет список. Изменяется только переменная i. –
Когда вы перебираете цикл 'for', переменная' i' принимает _value_ каждого элемента в списке. Это не _reference_ для каждой точки в списке. Это отдельная переменная. Если вы переназначите его, вы будете влиять только на переменную 'i'. – khelwood
Значит, это правильное значение? – user3002386