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:

  1. Dane nie powinny się zmieniać (współrzędne, wersja, konfiguracja)
  2. Potrzebujesz klucza w słowniku lub elementu zbioru
  3. Zwracasz wiele wartości z funkcji
  4. Chcesz zaoszczędzić pamięć
  5. Iterujesz po danych (tuple jest szybsza)

Używaj listy gdy:

  1. Dane będą się zmieniać (dodawanie, usuwanie elementów)
  2. Potrzebujesz metod modyfikujących (append, remove, sort itp.)
  3. 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() i index()
  • 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