Um dos conceitos básicos em programação é a variável, que é uma associação entre um nome e um valor. Ou seja, abaixo, neste fragmento na linguagem C:
int a;
a = 1;
temos uma variável com o nome a sendo declarada, com tipo inteiro e contendo o valor 1. Em Python, não precisamos declarar variáveis, nem seus tipos:
>>> a = 1
seria a instrução equivalente; define uma variável com o valor 1, que é um valor inteiro.
Python possui o que é conhecido como tipagem dinâmica: o tipo ao qual a variável está associada pode variar durante a execução do programa. Não quer dizer que não exista tipo específico definido (a chamada tipagem fraca): embora em Python não o declaremos explicitamente, as variáveis sempre assumem um único tipo em um determinado momento.
>>> a = 1
>>> type(a) # a função type() retorna o tipo
<type 'int'> # associado a uma variável
>>> a = "1"
>>> type(a)
<type 'str'>
>>> a = 1.0
>>> type(a)
<type 'float'>
Tipagem dinâmica, além de reduzir a quantidade de planejamento prévio (e digitação!) para escrever um programa, é um mecanismo importante para garantir a simplicidade e flexibilidade das funções Python. Como os tipos dos argumentos não são explicitamente declarados, não há restrição sobre o que pode ser fornecido como parâmetro. No exemplo acima, são fornecidos argumentos de tipos diferentes à mesma função type, que retorna o tipo deste argumento.