이 질문은 이전에 질문 한 질문의 연장입니다. Python Delegate Pattern - How to avoid circular reference? 답장을 읽은 후 제 질문을 명확히하기로했지만 별도로 게시하도록 요청되었습니다.파이썬의 가비지 수집은 모든 상황에서 순환 참조 객체의 교정을 보장 할 수 있습니까?
은 간다 :
- 파이썬 문서에서 통로 (아래 재생)을 garbaged 컬렉션이 원형 참조 오브젝트 보장되지 않는 상태. 내가 발견 한 게시물 here은 똑같은 것을 제안합니다. 그러나 나의 이전 질문에 대한 대답은 의견이 맞지 않는다. 그래서 내가 그 구절을 잘못 이해했거나 더 이상 놓친 부분이 이니?
- Alex Martelli의 질문에 대한 답변이 Should I worry about circular references in Python? 인 것처럼 약한 참조를 사용한다고 가정합니다. 회신에 언급 된 순환 참조 객체가 가비지 수집에 대한 오버 헤드를 완전히 피할 수 있습니까? 그렇다면 어떻게 작동합니까?
파이썬 문서에서 충돌 다음 통로 제안 관련 파이썬 문서 :
CPython의 구현 세부 사항 : CPython의 현재 주기적 연결된 쓰레기의 검출 지연 (옵션)와 참조 카운팅 방식을 사용하여, 대부분의 객체는 에 도달하자마자 수집하지만 은 순환 참조을 포함하는 가비지 을 수집하지 않을 것입니다. 순환 쓰레기 수집 제어에 대한 정보는 gc 모듈 의 설명서를 참조하십시오. 다른 구현이 다르게 작동하고 CPython이 변경 될 수 있습니다. 도달 할 수 없게 된 경우 (예 : 항상 파일을 닫음) 객체를 즉시 완료하는 데 을 의존하지 마십시오.
원래 형태의 절은 다음에서 찾을 수 있습니다. http://docs.python.org/reference/datamodel.html 굵게 설정은 내 것입니다.
미리 답변 해 주셔서 감사합니다.
안녕하세요. 그래서 당신의 대답에서 순환 참조가 메모리 누출로 이어질 수 있다고 말할 수는 있지만 일반적으로 심각하지는 않습니다. 성능이 현저히 떨어지는 경우 디버거에서 알 수 있어야합니다. 의심의 이익을 감안할 때, 이전 게시물에 대한 답변은 아마도 귀하와 같은 정신을 지녔을 것입니다. 또한이 문제를 완전히 피하기 위해 약한 참조를 사용하여 사이클의 객체 중 하나를 참조하여 순환 참조를 중단 할 수 있습니다. – lightalchemist