Если вы сделаете это список понимание:описаний списков и одна линия для петель
squares = [x**2 for x in range(100000)]
Было бы занять много памяти, так что вы могли бы сделать то же самое с помощью генератора:
squares = (x**2 for x in range(100000))
Теперь давайте скажем, я хочу использовать одну линию контура для печати всех этих квадратов:
[print(square) for square in squares]
Мой вопрос:: Печатает ли этот способ создания списка (это похоже на понимание списка)? Если да, сохраняет ли этот список в памяти? (Если это произойдет, это не имело бы никакого смысла использовать генератор при создании squares
, потому что те будут получать хранится в другом списке так или иначе.) И еще одно: если вы сделаете это:
[1, 2, 3, 4, 5, 6]
без назначения его к любой переменной, сохраняются ли эти значения в памяти?
Важное замечание: они все равно будут созданы в памяти интерпретатором, а затем уничтожены сборщиком мусора, поскольку недостаток ссылок. – user312016
Да да @ user312016, вот почему я написал * «Первоначально память будет выделена, но она сразу же освобождается, поскольку Python может видеть, что вы ее не используете» * :-). Я интерпретировал вопрос OPs «хранимый в памяти» как вопрос о том, сохраняется ли память в памяти * после того, как * оператор выполнил.(в интерактивном режиме '_' хранит его, но это исключение) –
Woops, я пропустил эту часть – user312016