Cześć.
Strzelam ślepo, że tej kolekcji w Pythonie nie znasz. I nie jest to dziwne, ponieważ jest spora szansa, że nigdy nie będziesz potrzebował jej używać. Mimo to, wiedza, że taki obiekt istnieje, do czego służy, jakie ma ograniczenia i jakie zalety, może się przydać. Może kiedyś tą wiedzą uratujesz projekt? Ale dość dywagacji, przejdźmy do sedna.
Tablice w Pythonie, a precyzyjniej w CPythonie, to cieniutki wrapper na tablice znane z języka C. Wprost z tego faktu wynika inny fakt: tablice wymagają deklaracji tego, jaki typ danych będą przechowywać. Działa to tak:
1 2 3 4 5 6 7 8 | from array import array from collections.abc import Iterable arr = array('i', [1, 2, 3, 4, 5]) print(arr) # array('i', [1, 2, 3, 4, 5]) print(isinstance(arr, Iterable)) # True |
Czyli pierwszy argument to deklaracja typu, gdzie możliwości są takie:
A próba przekroczenia zdefiniowanego typu skutkuje wyjątkiem:
1 2 3 4 5 6 7 8 9 10 | from array import array arr = array('h', [3658653, 245635]) """ Traceback (most recent call last): File "/home/mmazurek/PycharmProjects/tests/c.py", line 3, in <module> arr = array('h', [3658653, 245635]) OverflowError: signed short integer is greater than maximum """ |
Więc już na samym początku jest ograniczenie. Wygodne to nie jest, ale nie uprzedzajmy się.
Podstawowy interfejs znany z list jest wspólny dla obu typów, więc część metod działa zgodnie z przewidywaniem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | from array import array arr = array('i', [2305, 11243, 86743]) for x in arr: print(x) """ 2305 11243 86743 """ arr.append(48493) print(arr) # array('i', [2305, 11243, 86743, 48493]) arr.extend([1, 3, 7]) print(arr) # array('i', [2305, 11243, 86743, 48493, 1, 3, 7]) arr.remove(3) print(arr) # array('i', [2305, 11243, 86743, 48493, 1, 7]) arr.index(2305) # zwraca 0 |
Dodatkowo, tak jak listy, są obiektami zmiennymi, zachowują kolejność elementów i pozwalają na duplikaty.
Przede wszystkim wtedy, kiedy jest sens korzystać z ich największej zalety. A tą zaletą jest zużycie pamięci. Tablice, zgodnie z tym co napisałem na samym początku, są cieniutkim wrapperem na odpowiadający im ten sam typ w języku C, więc omijają narzut który dodaje język Python, by uzyskać funkcje dostępne dla list. Zerknij na kod:
1 2 3 4 5 6 7 8 9 10 | from array import array from pympler.asizeof import asizeof numbers = list(range(0, 10000)) numbers_as_array = array('i', numbers) print(asizeof(numbers_as_array)) # 40064 B print(asizeof(numbers)) # 400048 B |
Wpis krótki, ale myślę, że ciekawy. Ja osobiście nie miałem nigdy konieczności skorzystania z tego obiektu, ale jestem przekonany, że ta wiedza nie jest bezużyteczna.
Cześć. Dziś luźny artykuł, bo dziś pobawimy się jedną z pierwszy wersji Pythona. Skompilujemy go i zobaczymy co tam w… Read More
Nowy rok czas zacząć! Więc lećmy z podsumowaniem. Nowy artykuł Nie uwierzycie, ale pojawił się na blogu nowy artykuł! Piszę… Read More
Cześć! W Pythonie 3.13 dodano JITa! JIT, czyli just-in-time compiler to optymalizacja na która Python naprawdę długo czekał. Na nasze… Read More
Cześć! Zapraszam na podsumowanie roku 2024. Książki W sumie rok 2024 był pod względem ilości książek nieco podobny do roku… Read More
Podtrzymując tradycję, prawie regularnych podsumowań, zapraszam na wpis! Nie mogło obyć się bez Karkonoszy We wrześniu odwiedziłem z kolegą Karkonosze,… Read More
Oj daaawnoo mnie tu nie było. Ale wakacje to był czas dużej liczby intensywnych wyjazdów i tak naprawdę, dopiero jakoś… Read More
Pokaż komentarze
Dziękuję. Zanim zaczęłam uczyć się Pythona, miałam jakieś mgliste pojęcie o tablicach w C. I na początku drogi i nauce o wbudowanych typach obiektów, zastanawiałam się co z tablicami ;D
I tablice się znalazły ;D ciesze się bardzo!