2012-12-06 2 views
4

가능한 중복 :
Is close() necessary when using iterator on a Python file object파일을 변수에 할당하지 않으면 파일이 자동으로 닫힙니 까?

for line in open("processes.txt").readlines(): 
    doSomethingWith(line) 

예를 들어 그 코드를 가져 가라. close()를 호출 할 아무 것도 없습니다. 그러면 자동으로 닫힙니 까?

+0

절대로 닫지 않으면 메모리에 열려 있습니다. 자동으로 닫히지 않습니다. –

+0

이 코드는 부적절한 코드 조각입니까? 나는 형식이 일반적이라는 인상하에 있었다. 내가 close ("processes.txt")를 따르지 않으면 ...? 물론 ... – Aerovistae

+0

독자를 닫으면 괜찮을 것입니다. 언급 된 Snakes를 사용하는 것이 좋습니다 : with() -> 이것은 파일로 필요한 것을 수행 할 때 독자가 닫을 것을 보장합니다. –

답변

7

해당 개체의 할당이 해제되면 파일이 닫힙니다. 당신이주는 샘플은 그것에 달려 있습니다; 개체에 대한 참조가 없으므로 개체가 제거되고 파일이 닫힙니다.

개체를 언제 제거 할 것인지에 대한 보장은 없습니다. CPython을 사용하면 메모리 관리의 기초로 참조 횟수가 계산되므로 파일을 즉시 닫을 수 있습니다. 자이 썬에서 가비지 컬렉터는 특정 시점 (또는 전혀) 실행되지 않을 수 있으므로 닫히는 파일에 의존해서는 안되며 수동으로 파일을 닫거나 with을 사용해야한다. 성명서.

5

AFAIK 그들은 그렇지 않습니다. 자동 닫기를 수행하려면 with

과 같은 컨텍스트 관리자를 사용해야합니다. 개체 자체가 가비지 수집에서 회수되어 닫힐 수 있지만 가비지 수집이 발생할 때까지 명확한 시간은 없습니다.

with open("processes.txt") as openfile: 
    <do stuff> 
관련 문제