Réassigner un nom à lui-même

Notez ces lignes dans multiprocessing package multiprocessing de bibliothèques standard:

 dict = dict list = list 

À quoi __builtins__ de __builtins__ certains noms déjà disponibles sur __builtins__ dans la scope du module? Que tente-t-il de réaliser? J’ai cherché une explication dans le blâme de git, mais cette validation était importante et il n’y avait aucun commentaire pertinent.

Ce code se produit dans multiprocessing.dummy , une “fausse” version du multiprocessing qui implémente la fonctionnalité avec les threads. Si vous regardez quelques lignes, vous verrez

 def Manager(): return sys.modules[__name__] 

multiprocessing.dummy implémente Manager tant que fonction qui renvoie simplement le module multiprocessing.dummy lui-même, de sorte que l’object module multiprocessing.dummy doit fournir l’API d’un object Manager multiprocessing. Les lignes

 dict = dict list = list 

copier les liaisons pour les noms de dict et de list de l’espace de nommage intégré dans l’espace de noms du module, afin de pouvoir le faire

 m = multiprocessing.dummy.Manager() d = m.dict() 

comme si vous aviez un vrai multiprocessing.Manager() .