Почему переменная понимания списка доступна после завершения операции?

В рамках другого опыта я столкнулся с проблемой в понимании списка. Чтобы просто сказать, если я пробую следующий код:

m = [ k**2 for k in range(7)] print m [0, 1, 4, 9, 16, 25, 36] print k 6 
  1. Мой вопрос: как python может получить значение k, вне понимания списка?
  2. Почему k не сбор мусора?
  3. Это не утечка памяти?

2 Solutions collect form web for “Почему переменная понимания списка доступна после завершения операции?”

Нет, это не утечка памяти, поскольку этот термин обычно определяется. В Python 2.x понимание списка не является отдельной областью, поэтому переменная, которую вы используете в понимании списка, входит в область функции, которая ее содержит. Вы можете легко увидеть это в действии, установив k перед пониманием списка; listcomp скроет его.

Поскольку существует действительная ссылка, объект k указывает на (правильно), а не сбор мусора.

В Python 3.x это было изменено; все осознания создают свои собственные области и не «течет» в охватывающую область.

Однако в Python 2.x выражения генератора имеют свою собственную область видимости, поэтому, если вы хотите этого поведения, просто напишите его следующим образом:

 m = list(k**2 for k in range(7)) 

Потому что в Python 2 переменная списка «утечка» в окружающую область. Это было ошибкой в ​​том, как были построены списки.

Это было исправлено для dict и set comprehensions, выражений генератора и в Python 3 для понимания списков.

Это не утечка памяти. Это просто ошибка в области переменной.

  • Понимание понимания списков
  • Как получить объединение двух списков, используя понимание списка?
  • Понимание Python 2 и eval
  • Сплит CSV-файл с использованием Python показывает не все данные в Excel
  • Вычитание по списку множеств
  • Python Запуск суммарной суммы с заданным окном
  • Имя не определено в понимании списка с несколькими циклами
  • Преобразование вложенных петель Python в списки
  • Сделать Javascript выполнимым списком
  • Удалить элемент в списке, используя понимание списка - Python
  • Почему цикл Python для понимания списка выглядит наоборот?
  • Python - лучший язык программирования в мире.