Najlepsza odpowiedź
Dobry wieczór,
Na szczęście niektóre języki implementują bezpieczny obiekt dostęp, chociaż nie wiem zbyt wiele w Pythonie, możemy założyć, że obiekt, do którego uzyskujesz dostęp, ma sprawdzanie zakresu.
To, co możemy zrozumieć z tej bardzo prostej instrukcji, to to, że Python tworzy obiekty na niektórych lub większości podstawowych typy danych i niejawnie wywołuje swoje metody dostępu w razie potrzeby, przekształca i sprawdza zakres, konwersje itd., więc masz tam błąd logiczny, sprawdź, dlaczego uzyskałeś dostęp do krotki spoza jej zakresu, najwyraźniej kod ma błąd w indeksie i / lub rozmiar krotki.
To uwaga, aby wskazać, że inne języki są bardziej tolerancyjne w tym, na co pozwalają, co powoduje tak zwany błąd czasu wykonywania, ponieważ dostęp poza zakresem oznacza czytać niezamierzone dane i może zapisywać również w pamięci innego obiektu, a tym samym uszkodzić dane, w końcu powodując utratę danych lub uruchomienie ti Awaria.
Pozdrawiam
Jean-François
Odpowiedź
W Pythonie lista jest zmienna, więc rozmiar nie jest ustalony.
Ponieważ rozmiar nie jest ustalony
Na podstawie przypisanych przez Ciebie wartości do listy, zarządzanie pamięcią w Pythonie – wewnętrznie tworzy listę (dostępny indeks) we wzorcu wzrostu 0, 4 , 8, 16, 25, 35, 46, 58, 72, 88,… zamiast wielokrotnie wywoływać funkcję realloc ().
Ale przypisane wartości dla listy są mniejsze niż lista ( dostępny indeks).
Zatem w przypadku listy dostępny indeks > przypisany indeks.
Jeśli spróbujesz uzyskać dostęp do pustego lub elementu , wskazując dostępny indeks listy, pojawi się „ Błąd indeksu listy poza zakresem”.
otwórz Pythona i zabrudz sobie ręce z TH jest poniżej kodu, aby lepiej go zrozumieć.
>> x = list (1234)
>> x
[1, 2, 3, 4]
>> length = len (x)
4
>> x [długość ]
Błąd indeksu: indeks listy poza zakresem
UWAGA: Indeks listy zaczyna się od zera (0).
Ale tutaj długość wynosi cztery.
Przypisanie powyższej listy wygląda następująco:
x [0] = 1
x [1] = 2
x [2] = 3
x [3] = 4
x [4] =?
Jeśli spróbujesz uzyskać dostęp do x [4], czyli Nieistniejące , indeks listy znajdzie się poza zakresem.
Aby lepiej zrozumieć, w jaki sposób listy wewnętrznie alokują pamięć, zobacz ten link Lista Pythona implementacja .
Dziękuję !!!