Да и нет. Объект будет уничтожен после того, как вы покинете foo (при условии, что ничто иное не имеет ссылки на него), но то, является ли он непосредственным или нет, является деталью реализации и будет различаться.
В CPython (стандартная реализация python) используется пересчет, поэтому элемент будет немедленно уничтожен. Есть некоторые исключения из этого, например, когда объект содержит циклические ссылки, или когда ссылки содержатся на охватывающем фрейме (например, возникает исключение, которое сохраняет ссылку на переменные фрейма.)
Однако в таких имплиментах, как Jython или IronPython, объект не будет завершен, пока не будет запущен сборщик мусора.
Таким образом, вы не должны полагаться на своевременное завершение объектов, а должны только предполагать, что они будут уничтожены в какой-то момент после того, как пойдет последняя ссылка. Когда вам нужно выполнить очистку на основе лексической области, либо явно вызовите метод очистки, либо посмотрите на новый с оператором в python 2.6 (доступен в 2.5 с "from __future__ import with_statement
").