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

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

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 () против скорости построения списка
  • Как оптимизировать условные списки python
  • Я обнаружил, что размахиваю молотком списка
  • NameError во вложенных выражениях
  • Python - группировать и суммировать список кортежей
  • несколько действий в понимании списка python
  • элегантно разбивая список (или dict) на два через какую-то произвольную функцию в python
  • Python - лучший язык программирования в мире.