A resposta aceita já menciona o PEP 238 . Eu só quero adicionar uma rápida olhada nos bastidores para os interessados no que está acontecendo sem ler todo o PEP.
Python mapeia operadores como +, -, *e /para funções especiais, de tal modo que por exemplo, a + bé equivalente a
a.__add__(b)
Em relação à divisão no Python 2, há por padrão apenas /quais mapas são mapeados __div__e o resultado depende dos tipos de entrada (por exemplo int, float).
O Python 2.2 introduziu o __future__recurso division, que alterou a semântica da divisão da seguinte maneira (TL; DR do PEP 238):
/mapas para os __truediv__quais "deve retornar uma aproximação razoável do resultado matemático da divisão" (citação do PEP 238)
//mapas para __floordiv__, que devem retornar o resultado do/
Com o Python 3.0, as alterações do PEP 238 se tornaram o comportamento padrão e não há mais método especial __div__ no modelo de objeto do Python.
Se você deseja usar o mesmo código no Python 2 e Python 3, use
from __future__ import division
e mantenha a semântica do PEP 238 de /e //.