이 기사는 Python 참조 계산 및 약한 참조(예제 포함)에 대한 간단한 이해를 제공합니다. 특정 참조 가치가 있으므로 도움이 될 수 있습니다.
앞면에 적음:
이전 소켓 시리즈는 주로 제가 배운 내용을 요약하고 기록하기 위해 끝났습니다.
다음에는 libevent를 기반으로 동시성을 지원하는 HTTP 서버를 작성할 계획입니다. 스터디 그룹의 마스터는 이전에 HTTP와 WebSocket을 모두 지원하는 서버를 이미 개발한 적이 있었기 때문에 읽고 나서 매우 흥미를 느껴 이 네트워크 프로그래밍 책을 구입하여 읽었습니다. 나는 그를 참조하여 간소화된 버전을 작성할 계획입니다.
HTTP만 지원합니다. 작성을 마친 후에는 모두와 공유할 수 있습니다. 비록 프로덕션 환경에서는 사용할 수 없지만 소스 코드를 배우고 나면 나 자신에게 큰 발전이 될 것이라고 믿습니다.
주제 옆:
먼저 예제 코드를 넣으세요:
생성자와 소멸자를 포함하여 테스트용 x 객체를 만듭니다.
x 객체는 처음으로 초기화되고 변수 a에 의해 참조되므로 여기서 참조 카운트는 1입니다. 그런 다음 getrefcount를 통해 참조 수를 가져옵니다. getrefcount 함수 호출 자체도 a에 대한 참조이기 때문에 2가 됩니다.
다음으로, Weakref.ref()를 통해 약한 참조를 생성합니다. getrefcount를 통해 참조 카운트를 인쇄한 후 카운트가 변경되지 않은 것을 확인합니다.
w()는 두 인스턴스가 정확히 동일한지, 즉 동일한 메모리 주소를 점유하고 있는지 확인하는 문장입니다.
그런 다음 del a를 사용하여 a를 x 객체로 역참조합니다. 여기서 del은 x 객체를 직접 재활용하지 않지만 변수 참조가 0이면 재활용된다는 점에 유의하세요. 따라서 x 객체는 del을 호출한 후 재활용됩니다.
이전 코드를 통해 약한 참조를 호출하는 방식이 함수형 방식임을 알 수 있습니다. 그러나 대신 변수 이름을 사용하여 호출하기 위해 프록시를 사용할 수 있습니다.
이 시점에서 나는 약한 참조의 사용법을 확실히 마스터했다고 믿습니다. 그런데 약한 참조가 정확히 무엇을 하는 걸까요?
다른 많은 고급 언어와 마찬가지로 Python에도 가비지 수집 메커니즘이 있습니다. 각 객체에는 참조 횟수가 있으며, 이 횟수가 0이 되면 해당 객체는 안전하게 소멸될 수 있습니다.
한 번에 하나의 객체만 재활용할 수 있으므로 참조 카운팅에서는 순환 참조가 있는 객체를 재활용할 수 없습니다. 서로를 참조하는 개체 집합은 다른 개체에서 직접 참조하지 않고 액세스할 수 없는 경우 영원히 유지됩니다.
응용 프로그램이 액세스할 수 없는 개체 그룹을 지속적으로 생성하면 메모리 누수가 발생합니다.
약한 참조는 이러한 종류의 순환 참조 시나리오를 처리하는 데 매우 적합합니다.
위 내용은 Python 참조 카운팅 및 약한 참조에 대한 간단한 이해(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!