On Tue, 30 Jul 2019 at 09:33, Christian Tismer <tis...@stackless.com> wrote:
> >>> typing.NamedTuple("__f", x=int, y=int)
> <class '__main__.__f'>
> >>> typing.NamedTuple("__f", x=int, y=int) is typing.NamedTuple("__f",
> x=int, y=int)
> False

This appears to go right back to collections.namedtuple:

>>> from collections import namedtuple
>>> n1 = namedtuple('f', ['a', 'b', 'c'])
>>> n2 = namedtuple('f', ['a', 'b', 'c'])
>>> n1 is n2
False

I found that surprising, as I expected the named tuple type to be
cached based on the declared name 'f'. But it's been that way forever
so obviously my intuition here is wrong. But maybe it would be useful
for this case if there *was* a way to base named tuple identity off
the name/fields? It could be as simple as caching the results:

>>> from functools import lru_cache
>>> cached_namedtuple = lru_cache(None)(namedtuple)
>>> n1 = cached_namedtuple('f', ('a', 'b', 'c')) # A tuple rather than a list 
>>> of field names, as lists aren't hashable
>>> n2 = cached_namedtuple('f', ('a', 'b', 'c'))
>>> n1 is n2
True

Paul
_______________________________________________
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/OBWZHQGIJA2H2HP2VGTKHVLNY2IFJRXW/

Reply via email to