Tuple - niezmienność i użycie
1. Czym jest tuple?
Tuple (krotka) to uporządkowana, niemutowalna (niemodyfikowalna) kolekcja elementów w Pythonie.
Kluczowe cechy tuple:
- Uporządkowana – elementy mają określoną kolejność (indeksy).
- Niemutowalna – nie można dodawać, usuwać ani modyfikować elementów po utworzeniu.
- Indeksowana – dostęp do elementów po indeksie (od 0).
- Heterogeniczna – może zawierać różne typy danych.
- Hashowalna – może być kluczem w słowniku lub elementem zbioru.
2. Tworzenie tuple
2.1. Podstawowa składnia
2.2. Konstruktor tuple()
3. Dostęp do elementów
3.1. Indeksowanie
Złożoność czasowa: O(1)
3.2. Wycinki (slicing)
4. Niezmienność tuple
4.1. Próba modyfikacji powoduje błąd
4.2. Niemutowalne, ale mogą zawierać mutowalne obiekty
Uwaga: Sama tuple nie zmienia się, ale obiekt wewnątrz może.
4.3. Tworzenie nowej tuple zamiast modyfikacji
5. Operacje na tuple
5.1. Łączenie tuple (+)
5.2. Powtarzanie tuple (*)
5.3. Sprawdzanie przynależności (in)
Złożoność czasowa: O(n)
5.4. Długość tuple (len())
Złożoność czasowa: O(1)
6. Metody tuple
Tuple ma tylko dwie metody (w przeciwieństwie do list):
6.1. count() – zlicz wystąpienia
Złożoność czasowa: O(n)
6.2. index() – znajdź indeks pierwszego wystąpienia
Wyjątek: ValueError jeśli element nie istnieje.
Złożoność czasowa: O(n)
7. Unpacking (rozpakowywanie) tuple
7.1. Podstawowe unpacking
7.2. Zamiana wartości zmiennych
7.3. Unpacking z * (rozszerzone)
7.4. Ignorowanie wartości za pomocą _
8. Tuple jako zwracane wartości funkcji
Funkcje mogą zwracać wiele wartości jako tuple.
8.1. Zwracanie wielu wartości
8.2. Współrzędne
9. Named tuple
Named tuple to rozszerzenie tuple z nazwanymi polami, dostępne w module collections.
9.1. Tworzenie named tuple
9.2. Named tuple vs dict
Zalety named tuple: - Mniej pamięci niż słownik - Niemutowalna (bezpieczniejsza) - Czytelniejszy kod
10. Tuple vs Lista
| Cecha | Tuple | Lista |
|---|---|---|
| Modyfikowalna | Nie | Tak |
| Składnia | (1, 2, 3) |
[1, 2, 3] |
| Zużycie pamięci | Mniejsze | Większe |
| Wydajność | Szybsza | Wolniejsza |
| Hashowalna | Tak | Nie |
| Metody | 2 (count, index) |
Wiele |
| Użycie | Niezmienne dane | Dane zmienne |
10.1. Porównanie pamięci
Tuple zajmują mniej pamięci!
10.2. Porównanie wydajności
Tuple są szybsze do tworzenia!
11. Praktyczne zastosowania tuple
11.1. Klucze w słownikach
11.2. Elementy zbioru
11.3. Bezpieczne dane
11.4. Zwracanie wielu wartości
11.5. Argumenty funkcji (*args)
12. Iterowanie po tuple
12.1. Pętla for
12.2. enumerate()
12.3. zip()
13. Konwersja między tuple a listą
13.1. Tuple → Lista
13.2. Lista → Tuple
14. Zagnieżdżone tuple
15. Złożoność czasowa operacji na tuple
| Operacja | Złożoność | Opis |
|---|---|---|
t[i] |
O(1) | Dostęp po indeksie |
x in t |
O(n) | Sprawdzenie, czy element istnieje |
t.count(x) |
O(n) | Zliczanie wystąpień |
t.index(x) |
O(n) | Znajdowanie indeksu |
len(t) |
O(1) | Długość tuple |
t1 + t2 |
O(n+m) | Łączenie tuple |
16. Najczęstsze błędy
Błąd 1: Zapomnienie przecinka w jednoelementowej tuple
Błąd 2: Próba modyfikacji tuple
Błąd 3: Nieprawidłowy unpacking
17. Kiedy używać tuple zamiast listy?
Używaj tuple gdy:
- Dane nie powinny się zmieniać (współrzędne, wersja, konfiguracja)
- Potrzebujesz klucza w słowniku lub elementu zbioru
- Zwracasz wiele wartości z funkcji
- Chcesz zaoszczędzić pamięć
- Iterujesz po danych (tuple jest szybsza)
Używaj listy gdy:
- Dane będą się zmieniać (dodawanie, usuwanie elementów)
- Potrzebujesz metod modyfikujących (
append,remove,sortitp.) - Rozmiar kolekcji jest dynamiczny
18. Podsumowanie
Tuple to niemutowalna alternatywa dla list:
- Szybsza i zajmuje mniej pamięci
- Bezpieczna – nie można przypadkowo zmodyfikować
- Hashowalna – może być kluczem w słowniku
- Idealna do przechowywania stałych danych
- Doskonała do zwracania wielu wartości
Kluczowe różnice vs lista:
- Niemutowalna – nie można zmieniać po utworzeniu
- Mniej metod – tylko
count()iindex() - Hashowalna – może być kluczem słownika
Co dalej warto poznać:
- Named tuple – tuple z nazwanymi polami
- Słowniki – pary klucz-wartość
- Zbiory – unikalne elementy
- Dataclass – nowoczesna alternatywa dla named tuple