Пичаль… и эти люди дают советы по Python.
Начнем с того что Python в первую очередь опирается на механизм подсчета ссылок. GC работает когда есть циклические ссылки и простой подсчет ссылок уже не срабатывает. (Андрей Светлов, поправь если что не так)
По поводу как работать с файлами. Правильно сказали, что с файлами нужно работать через with.
Да это правда что в конструкции
Файл скорей всего будет закрыт сразу после выполнения метода read, так как создастся временная ссылка, которая сразу же после выполнения read будет уничтожена и соответственно файл закрывается если можно так выразиться в деструкторе.
Но это еще не самое забавное.
def foo():
fd = open('filename')
fd.read()
В какой момент закроется файл? Ответ: неизвестно.
В большинстве случаев вы могли бы расчитывать на то, что файл будет закрыт по выходу из функции foo.
И это будет работать. Так как функции ограничивают область видимости, все локальные ссылки по выходу из них уничтожаются. У fd был счетчик ссылок 1, стал 0, файл закрылся.
И все сказочно до тех пор, пока из функции не будет выброшено исключение.
Исключение хранит ссылку на тот фрейм из которого оно было выброшено. Будет ли закрыт файл?
Кстати поведение для Python 2.x и 3.x может отличаться.
Вывод: ВСЕГДА для ресурсов, которые требуют ручного освобождения использовать конструкцию with если сие позволяет интерфейс. НИКОГДА не надеяться на сборщик мусора или подсчет ссылок.