Python ma bogatą kolekcję wbudowanych typów obejmujących liczby, tekst, kolekcje i wiele więcej. Znanie ich — i które są mutable vs immutable — jest fundamentalne.
Typy liczbowe
x =
y =
z = +
b =
Uwaga: Python int ma dowolną precyzję — nigdy się nie przepełnia (w przeciwieństwie do ints o stałym rozmiarze w C/Java); 2 ** 1000 po prostu działa.
s = "hello" # str — Unicode text (immutable)
data = b"bytes" # bytes — raw binary (immutable)
lst = [1, 2, 3] # list — ordered, MUTABLE, allows duplicates
tup = (1, 2, 3) # tuple — ordered, IMMUTABLE
d = {"a": 1, "b": 2} # dict — key→value, mutable, insertion-ordered
s = {1, 2, 3} # set — unordered, unique elements, mutable
fs = frozenset({1, 2}) # frozenset — immutable set
result = None # NoneType — represents "no value" (like null)
if result is None: # always compare to None with `is`, not ==
...
type(x) # <class 'int'>
isinstance(x, int) # True — the preferred check (handles subclasses)
Immutable: int, float, bool, str, tuple, frozenset, bytes, None
Mutable: list, dict, set, bytearray
Ta różnica ma duże znaczenie — obiekty immutable mogą być kluczami dict i bezpiecznie się je dzieli; obiekty mutable mogą się nieoczekiwanie zmienić, jeśli są aliasowane.
Wbudowane typy są słownictwem całego kodu Pythona.
Znanie każdego typu i jego przeznaczenia (list dla uporządkowanych sekwencji, dict dla par klucz-wartość, set dla unikalności, tuple dla stałych rekordów), liczb całkowitych o dowolnej precyzji, a zwłaszcza podziału mutable-vs-immutable (który reguluje klucze dict, błędy aliasowania i co można bezpiecznie dzielić) jest fundamentalne.
Wybór właściwego typu do zadania — i zrozumienie jego mutowalności — to kluczowa umiejętność Pythona, która wpływa na poprawność i wydajność w całym programie.