#python #language_lawyer
Пробую такие конструкции: file = open('file.txt').read() open('copy_file.txt', 'w').write(file) Почему-то все работает... Из опыта работы с другими языками я ожидал увидеть некоторые странности в связи с открытыми потоками (я их не закрываю), но все отлично работает. Даже при многократном запуске. И не похоже, что есть проблема утечки памяти. Почему так ? В документации ничего не нашел на эту тему...
Ответы
Ответ 1
У вас память используется только для хранения содержимого file.txt в переменной file. А открытые потоки закрываются и собираются сборщиком мусора сразу как заканчивается чтение или запись, так как у вас нет ссылок на эти объекты. Про сборку можно почитать по этой ссылке: http://arctrix.com/nas/python/gc/Ответ 2
В реализации python - PyPy сборщик не закрывает файлы и поэтому может быть утечка. Поэтому конечно лучше использовать универсальный with. Это очень поможет если вы вдруг захотели перенести проект на PyPy так как он в большинстве случаев быстрее стандартной реализации python - CPython. Перенести в данном случае - просто запускать на PyPy. А также при попытке прочитать незакрытый в PyPy файл вы получите пустую строку. (если файл открыт и для записи)
Комментариев нет:
Отправить комментарий