Alors que
Leonardo DiCaprio faisait l'unanimité pour le rôle principal, il n'en a pas été de même pour tous. Ainsi,
James Franco était en pourparlers avec
Christopher Nolan pour celui d'Arthur, mais en raison de problèmes d'emploi du temps, ce fut finalement
Joseph Gordon-Levitt qui reprit le rôle. De même, le premier choix du réalisateur pour le personnage d'Ariadne portait sur
Evan Rachel Wood, mais elle déclina l'offre. Les noms d'
Emily Blunt,
Keira Knightley ou encore d'
Emma Roberts furent annoncés avant que le rôle ne soit finalement dévolu à
Ellen Page. L'actrice indienne
Aishwarya Rai fut quant à elle considérée pour le rôle de Mal, qui revint à la française
Marion Cotillard.