Zadanie rekrutacyjne #3


Zadanie rekrutacyjne – znajdź referencje do obiektu w pythonie

Zaimplementuj funkcję w języku Python, która policzy, ile jest elementów w liście jednokierunkowej. Argumentem funkcji jest dowolny element tej listy.

Rozwiązanie

Aby powiedzieć, ile jest elementów listy, potrzebujemy sprawdzić odległość pomiędzy wskazanym węzłem a końcem oraz początkiem listy. Suma tych dwóch wartości da nam oczekiwany wynik.

Niestety węzeł listy nie zawiera referencji do poprzedniego elementu (lista jednokierunkowa). Aby poznać referencje do poprzedniego elementu, musimy poprosić o pomoc środowisko uruchomieniowe.

Odległość do końca łatwo uzyskać.

Aby poznać natomiast odległość od początku listy, musimy zapytać GC o referencje do naszego obiektu.

Na czas naszych zabaw wyłączamy GC. Następnie pobieramy listę wszystkich obiektów, których czas życia jest kontrolowany przez GC, filtrujemy je po typie i szukamy takiego, który wskazuje na nasz węzeł listy.

Aby powyższy kawałek kodu zadziałał, lista musi być poprawna.

UWAGA: powyższa metoda podana jest jako ciekawostka. Nie stosujcie jej na produkcji. 

 

Źródło: https://docs.python.org/3/library/gc.html

Dodaj komentarz

Twój adres email nie zostanie opublikowany.