Krotka (ang. tuple) w Pythonie to niezmienny typ sekwencji, który pozwala przechowywać wiele wartości w jednym obiekcie, podobnie jak lista, ale z ważnymi różnicami dotyczącymi ich zachowania i zastosowania.
Czym jest krotka w Pythonie?
- Krotka to sekwencja wartości, które mogą być dowolnego typu (np. liczby, napisy, inne krotki);
- Elementy krotki są indeksowane liczbami całkowitymi, przy czym pierwszy element ma indeks 0;
- Najważniejsza cecha krotek: są niezmienne (immutable) – po utworzeniu nie można zmienić zawartości krotki, czyli nie można dodać, usunąć ani zmienić żadnego z jej elementów;
- Krotki są typem haszowalnym, więc mogą być używane jako klucze w słownikach i elementy zbiorów.
Tworzenie krotek – składnia i przykłady
Krotkę można utworzyć na kilka sposobów:
# Najczęściej w nawiasach okrągłych
t1 = (1, 2, 3, 'abc', 4.5)
# Bez nawiasów, wystarczą przecinki (ale zwykle stosuje się nawiasy dla jasności)
t2 = 1, 2, 3
# Krotka jednoelementowa (singleton) – UWAGA: konieczny przecinek!
t_single = (42,)
print(type(t_single)) # <class 'tuple'>
Jeśli utworzymy krotkę bez przecinka – (42) – Python potraktuje to jako zwykłą liczbę w nawiasach, a nie krotkę.
Możemy też tworzyć krotki przy pomocy funkcji tuple():
# Pusta krotka
empty = tuple()
# Krotka ze znaków napisu
letters = tuple('Python') # ('P', 'y', 't', 'h', 'o', 'n')
Odwoływanie się do elementów, indeksowanie i slicing
- Elementy wybierane są jak w listach – przez indeks:
krotka = (10, 20, 30, 40)
print(krotka[0]) # 10
print(krotka[-1]) # 40
- Można pobierać wycinki (ang. slicing):
print(krotka[1:3]) # (20, 30)
Właściwości – kluczowe różnice względem list
| Cecha | Krotka | Lista |
|---|---|---|
| Zmienność | Niezmienna | Zmienna |
| Typ nawiasów | Okrągłe () | Kwadratowe [] |
| Metody modyfikacji | Brak | append, remove, itd. |
| Możliwość haszowania | Tak | Nie |
| Możliwość użycia jako klucz słownika | Tak | Nie |
Podstawowe operacje na krotkach
- Indeksowanie i slicing – identycznie jak w listach.
- Łączenie (
+) oraz powielanie (*):
a = (1, 2)
b = (3, 4)
c = a + b # (1, 2, 3, 4)
d = a * 3 # (1, 2, 1, 2, 1, 2)
- len() – długość krotki:
len(a) # 2
- Sprawdzanie zawartości –
1 in a # True
5 in a # False
- Porównywanie krotek odbywa się leksykograficznie – najpierw pierwszy element, potem drugi itd.
Praktyczne zastosowania krotek
- Przechowywanie stałych zestawów danych, które nie będą modyfikowane.
- Zwracanie wielu wartości z funkcji (Python umożliwia np.
return x, y, co jest de facto zwracaniem krotki). - Szybka zamiana wartości zmiennych:
a, b = b, a # obie strony to krotki – bardzo idiomatyczne w Pythonie
- Użycie jako klucz w słowniku:
points = {(0,0): "origin", (1,2): "A"}
- Przechowywanie rekordów – np. współrzędne, rgb, dane osobowe bez późniejszych zmian.
Ograniczenia i dobre praktyki
- Krotki nie mają metod do modyfikacji elementów (brak
.append(),.remove()itd.). - Jeśli elementem krotki jest obiekt zmienny (np. lista), zawartość tej listy można zmienić, co oznacza, że niektóre krotki mogą być „quasi-niemutowalne”.
- Często używa się krotek do rozpakowywania (unpacking) – przypisanie wielu zmiennych naraz:
a, b, c = (1, 2, 3)
# lub nawet
email = "[email protected]"
user, domain = email.split("@")
Przydatne metody i funkcje
.count(x)– liczba wystąpień wartości w krotce.index(x)– zwraca indeks pierwszego wystąpienia wartoścituple()– konwersja do krotki (np. z listy lub łańcucha znaków)
Kiedy warto stosować krotki?
- Gdy dane nie powinny być zmieniane w trakcie działania programu.
- Tam, gdzie wymagana jest większa szybkość i mniejszy narzut pamięci (krotki są wydajniejsze niż listy).
- W sytuacjach wymagających obiektów haszowalnych/kluczy.
- Do zwracania wielu wartości z funkcji oraz przechowywania niezmiennych rekordów.
Podsumowanie – najważniejsze cechy krotek
- Niezmienność – bezpieczeństwo danych.
- Czytelność – rozpoznawalna składnia (nawiasy okrągłe).
- Szybkość – bardziej efektywne od list tam, gdzie niezmienność jest zaletą.
- Wszechstronność – mogą zawierać różne typy danych, być zagnieżdżone i służyć jako klucze.
Dzięki znajomości krotek można pisać bardziej przejrzysty, bezpieczny i wydajny kod w Pythonie, szczególnie w miejscach, gdzie ważna jest niezmienność danych.