Я с удивлением обнаружил, что python (версия 3.2.2) отказывается сортировать объект, потому что его dict содержал ссылку на Ellipsis. Из других встроенных констант, pickle рад работать с False, True и None, как явно указано в рассортировать документацию, но также дросселирует на NotImplemented.
Python 3.2.2 (default, Sep 5 2011, 21:17:14)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pickle
>>> pickle.dumps(True)
b'\x80\x03\x88.'
>>> pickle.dumps(False)
b'\x80\x03\x89.'
>>> pickle.dumps(None)
b'\x80\x03N.'
>>> pickle.dumps(Ellipsis)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
_pickle.PicklingError: Can't pickle <class 'ellipsis'>: attribute lookup builtins.ellipsis failed
>>> pickle.dumps(NotImplemented)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
_pickle.PicklingError: Can't pickle <class 'NotImplementedType'>: attribute lookup builtins.NotImplementedType failed
Для полноты менее полезных встроенных констант __debug__ является просто bool, поэтому не вызывает проблем; copyright, license и credits работают (их тип site._Printer); quit и exit do not (их тип site.Quitter, который не может быть найден, поскольку он определен внутри функции).
Может кто-нибудь объяснить, почему это - конечно Ellipsis и NotImplemented не просто были пропущены? Единственная релевантная информация, которую я могу найти, это эта ошибка, которая жалуется, что NoneType (т.е. type(None)) не поддается сортировке. Один из комментаторов упоминает, что type(Ellipsis) и type(NotImplemented) нельзя мариновать, очевидно, не замечая, что их экземпляры тоже не могут быть.