On Wed, Jun 16, 2021 at 2:18 AM Dieter Maurer <die...@handshake.de> wrote: > > Chris Angelico wrote at 2021-6-15 19:08 +1000: > >On Tue, Jun 15, 2021 at 6:32 PM Dieter Maurer <die...@handshake.de> wrote: > >> > >> Chris Angelico wrote at 2021-6-15 05:35 +1000: > >> >On Tue, Jun 15, 2021 at 5:12 AM Jach Feng <jf...@ms4.hinet.net> wrote: > >> >> > >> >> >>> n = [(1,2) for i in range(3)] > >> >> >>> n > >> >> [(1, 2), (1, 2), (1, 2)] > >> >> >>> id(n[0]) == id(n[1]) == id(n[2]) > >> >> True > >> > > >> >This is three tuples. Tuples are immutable and you get three > >> >references to the same thing. > >> > >> In addition: object identity (as revealed by `id(...)`) is > >> an implementation detail. Do not rely on it! > > > >Hmm, not always. In this case, object identity isn't guaranteed - > >every literal could give you a unique object - but in other cases, > >object identity is a language guarantee. For instance: > > As far as I know, there are no guarantees are the language level. > There are some (partially documented) implementation details > for CPython (which is just one possible implementation).
Yes there are - plenty of them :) The example I gave is a language guarantee. Object identity is maintained in various places, and MUST be; in fact, I've heard tell that PyPy actually has to do some shenanigans to ensure that identities can be tracked across certain types of optimizations (where the object mightn't actually exist temporarily). ChrisA -- https://mail.python.org/mailman/listinfo/python-list