On Thu, May 20, 2021 at 10:37 PM David Mertz <me...@gnosis.cx> wrote: > > The scenario I'm thinking about is like this: > > (base) 84-tmp % python > Python 3.9.1 (default, Dec 11 2020, 14:32:07) > [GCC 7.3.0] :: Anaconda, Inc. on linux > Type "help", "copyright", "credits" or "license" for more information. > >>> import pickle > >>> cheap_sentinel = object() > >>> id(cheap_sentinel) > 140469343429632 > >>> pickle.dump(cheap_sentinel, open('sentinel.pkl', 'wb')) > > (base) 85-tmp % python > Python 3.9.1 (default, Dec 11 2020, 14:32:07) > [GCC 7.3.0] :: Anaconda, Inc. on linux > Type "help", "copyright", "credits" or "license" for more information. > >>> import pickle > >>> cheap_sentinel = object() > >>> id(cheap_sentinel) > 139852505814016 > >>> id(pickle.load(open('sentinel.pkl', 'rb'))) > 139852505813968 > > It would be pleasant if there were a way to make "cheap_sentinel" be the same > thing—either by equality or by identity—betweeen those two runs of the > interpreter. > > None or Ellipsis have that property, of course. So do, for example, > integers, at least by equality if not identity (yes, of course, we might get > identity by interning, but it's not guaranteed).
There are several ways of achieving this for other sentinel values, some of which have been mentioned earlier in this thread. Some examples are: 1. a value from a single-valued enum 2. a class object (not an instance) 3. a singleton class with a carefully implemented __new__ which always returns the same instance - Tal Einat _______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/RJXU7F6LYVJ4C4N4EPVA3A5F3QRGK253/ Code of Conduct: http://python.org/psf/codeofconduct/