Interesting to look at the code for some of this.

list.repr and dict.repr seem to be taking the "construct a set of seen
items" approach. Except it's not using a set of ids, it's doing a linear
pass over a list of visited PyObjects each time (which seems somewhat
surprising to me, though it's only O(n*d) where d is the nesting depth, not
O(n^2)):
https://github.com/python/cpython/blob/3bf05327c2b25d42b92795d9d280288c22a0963d/Objects/object.c#L1974

copy.deepcopy keeps track with a dict:
https://github.com/python/cpython/blob/3bf05327c2b25d42b92795d9d280288c22a0963d/Lib/copy.py#L138

(That uses a sentinel object as the default for the lookup so it can tell
if that's explicitly set to None, though that seems convoluted compared to
just checking whether the value is None or not. Is that considering that
"copy.deepcopy(x) is None and x is not None" might be true?)

Peace,
-Sam

On Fri, Jan 1, 2021 at 7:07 PM Greg Ewing <greg.ew...@canterbury.ac.nz>
wrote:

> On 2/01/21 6:14 am, Jeff Allen wrote:
> > we may as
> > well say that the required result takes the form of an iterable of the
> > nodes, which may subsequently be iterated by a consumer.
>
> In general you need more than that, I think. If you're printing
> a representation of the graph, you want to know about the structure,
> not just get a flat list of nodes.
>
> > But we must have to do something
> > very similar to pickle arbitrary (potentially cyclic) structures, which
> > is likewise dependent on special help from the particular built-in type.
> > Can something be founded on |||__getstate__| ?
>
> I don't think so. All the logic for dealing with cycles is buried
> inside pickle -- __getstate__ just gets info about one object.
>
> --
> Greg
>
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/3FMDYC76POOMNJ4OZUOJ2U3KCEMTGPII/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/TVXHQCSAE3V54V6MTKFGXEXSFD3RTBTT/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to