Я экспериментировал со списками и генераторами следующим образом:
lst = list('12345')
def get_generator(lst):
yield from lst
gen_on_lst = get_generator(lst)
lst.append('6') # you can try remove as well
print(list(gen_on_lst))
Вывод ['1', '2', '3', '4', '5', '6']
, что я и ожидал, потому что вам нужно использовать генератор с al oop или чем-то подобным для это должно быть фактически выполнено, и, очевидно, генератор «связан» со списком здесь, и изменения в списке влияют на генератор.
Тогда я попробовал это:
lst = list('12345')
def get_generator(lst):
yield from lst
gen_on_lst = get_generator(lst)
del lst
print(list(gen_on_lst))
Вывод ['1', '2', '3', '4', '5']
где я ожидал ошибку.
Так что же на самом деле происходит, когда я использую del? Я предполагаю, что генератор создает псевдоним (вероятно, недоступный для мира?), И когда я использую del
, он удаляет только один псевдоним фактического списка в памяти, и память не освобождается, потому что есть псевдоним (в генератор), указывающий на это. Предполагая, что генератор удалит свой внутренний псевдоним, память будет освобождена при использовании генератора, верно?
ИЛИ, хотя и менее вероятно, что это просто вопрос времени, когда список будет удален из памяти и просто глупая удача, что я поглотил генератор до освобождения основного списка.