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.
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
Cześć! Zapraszam na krótkie podsumowanie kwietnia. Wyjazd do Niemiec A dokładniej pod granicę z Francją. Chrześnica miała pierwszą komunię. Po… Read More
Ostatnio tygodnie były tak bardzo wypełnione, że nie udało mi się napisać nawet krótkiego podsumowanie. Więc dziś zbiorczo podsumuję luty… Read More
Zapraszam na krótkie podsumowanie miesiąca. Książki W styczniu przeczytałem "Homo Deus: Historia jutra". Książka łudząco podoba do wcześniejszej książki tego… Read More
Cześć! Zapraszam na podsumowanie roku 2023. Książki Zacznijmy od książek. W tym roku cel 35 książek nie został osiągnięty. Niemniej… Read More
Zapraszam na krótkie podsumowanie miesiąca. Książki W grudniu skończyłem czytać Mein Kampf. Nudna książka. Ciekawsze fragmenty można by było streścić… 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!