Python possui um rico conjunto de tipos incorporados abrangendo números, texto, coleções e muito mais. Conhecê-los — e quais são mutable vs immutable — é fundamental.
Tipos numéricos
x = 42 # int — arbitrary precision (no overflow!)
y = 3.14 # float
z = 2 + 3j # complex
b = True # bool (a subclass of int: True == 1)
Nota: Python int tem precisão arbitrária — nunca sofre overflow (ao contrário de ints de tamanho fixo em C/Java); 2 ** 1000 simplesmente funciona.
Texto e bytes
s = "hello" # str — Unicode text (immutable)
data = b"bytes" # bytes — raw binary (immutable)
Tipos de coleção
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
O tipo especial None
result = None # NoneType — represents "no value" (like null)
if result is None: # always compare to None with `is`, not ==
...
Verificando tipos
type(x) # <class 'int'>
isinstance(x, int) # True — the preferred check (handles subclasses)
Resumo: mutable vs immutable
Immutable: int, float, bool, str, tuple, frozenset, bytes, None
Mutable: list, dict, set, bytearray
Esta distinção é importante — objetos imutáveis podem ser chaves de dict e são seguros para compartilhar; objetos mutáveis podem mudar inesperadamente se forem aliased.
Por que isso importa
Os tipos incorporados são o vocabulário de todo código Python.
Conhecer o propósito de cada um (list para sequências ordenadas, dict para pares chave-valor, set para unicidade, tuple para registros fixos), inteiros de precisão arbitrária, e especialmente a divisão mutable-vs-immutable (que governa chaves de dict, bugs de aliasing e o que pode ser compartilhado com segurança) é fundamental.
Escolher o tipo certo para o trabalho — e compreender sua mutabilidade — é uma habilidade fundamental de Python que afeta a correção e o desempenho em todo um programa.
