list = ['random', 'set', 'of', 'strings']
for item in list:
item.replace('a','b')
print list
'random' - строковый объект, 'set' - строковый объект и т. Д.
список - это набор строковых объектов
for item in list:
присваивает имя (он же идентификатор) элемент последовательно каждому из объектов, перечисленных в объекте list .Назначение означает, что связь между именем и объектом создается.
Для каждого поворота цикла после присвоения item текущему объекту list , item.replace('a','b')
выполняется:
replace () создает новый объект, имеющий то же значение, что и объект с именем item , но с заменой 'a' на 'b'.
Где происходит это творение?В памяти.Новый объект физически создается где-то в ОЗУ, у объекта есть адрес, тип и значение.
А потом?Ну, а потом ничего.Объект находится там, в ОЗУ, и ему не присваивается имя.Таким образом, он умрет более или менее быстро, то есть биты, занятые новым объектом, будут повторно использоваться более или менее быстро, без какой-либо заботы об интерпретаторе, потому что у него нет возможности узнать, что там находится объект, так какна этот объект не ссылается идентификатор.
.
list = ['random', 'set', 'of', 'strings']
for item in list:
item = item.replace('a','b')
print list
Это происходит примерно так же.Разница в том, что после создания объект, полученный из инструкции item.replace('a','b')
, присваивается имени item .Или, если хотите, имя item переназначается новому объекту.
Итак, новый объект не умрет?Увы, так и будет.Поскольку при следующем повороте цикла инструкция for item in list
выполняет новое присвоение имени item следующему элементу list
.
Теперь вы также должны понимать, почему не рекомендуется называть список с именем list .Поскольку list - это имя встроенной функции, а определение list = ['random', 'set', 'of', 'strings']
имеет следствие: оригинальная встроенная привязка между именем list и объектной функцией list () не работает и заменяется связыванием между list и вышеуказанным набором строк.