Por que "1000000000000000 no intervalo (1000000000000001)" é tão rápido no Python 3?

Entendo que orange() função, que é realmenteum tipo de objeto em Python 3, gera seu conteúdo rapidamente, semelhante a um gerador.

Sendo esse o caso, eu esperaria que a linha a seguir levasse um tempo excessivo, porque, para determinar se 1 quadrilhão está no intervalo, seria necessário gerar um quadrilhão de valores:

1000000000000000 in range(1000000000000001)

Além disso: parece que não importa quantos zeros adiciono, o cálculo leva mais ou menos a mesma quantidade de tempo (basicamente instantâneo).

Eu também tentei coisas assim, mas o cálculo ainda é quase instantâneo:

1000000000000000000000 in range(0,1000000000000000000001,10) # count by tens

Se eu tentar implementar minha própria função de faixa, o resultado não é tão bom!

def my_crappy_range(N):
    i = 0
    while i < N:
        yield i
        i += 1
    return

O que érange() objeto fazendo sob o capô que o torna tão rápido?

Resposta de Martijn Pieters foi escolhido por sua completude, mas também vejaprimeira resposta de abarnert para uma boa discussão do que isso significa pararange ser um completoseqüência no Python 3, e algumas informações / avisos sobre inconsistência potencial para__contains__ otimização de funções nas implementações do Python.outra resposta de abarnert entra em mais detalhes e fornece links para os interessados na história por trás da otimização no Python 3 (e falta de otimização dexrange em Python 2). Respostaspor cutucar epor wim forneça o código fonte C relevante e explicações para quem estiver interessado.

questionAnswers(9)

yourAnswerToTheQuestion