On 2016-12-07 15:33, Ned Batchelder wrote:
On Wednesday, December 7, 2016 at 10:18:32 AM UTC-5, Rustom Mody wrote:
Trying to write some code using sets (well frozen sets)
And was hit by this anomaly

This is the behavior of lists I analogously expect in sets:

>>> []
[]
>>> [[]]
[[]]
>>>

ie the empty list and the list of the empty list are different things

However
(with
f= frozenset
)

>>> f()
frozenset()
>>> f([])
frozenset()
>>> f(f([]))
frozenset()
>>>

The difference is more about the difference between the behavior of a
callable constructor, and a list literal.  Lists will behave the same
as frozenset if you use list():

    >>> list()
    []
    >>> list(list())
    []
    >>> list(list(list()))
    []

This is because the constructors can take a sequence, and use those
elements as the new contents.  List literals don't work that way.


Spent a good ½ hour finding out this strangeness
And then some figuring out how to get an empty set into a set
This is the best I get:
>>> f([f([])])
frozenset({frozenset()})

That is the way I would have done it also. Or:

    >>> s = set()
    >>> s.add(frozenset())
    >>> frozenset(s)
    frozenset([frozenset([])])

Notice the repr output of the result shows how to make it! :)

You must be using Python 2 because on Python 3 I get:

>>> frozenset([frozenset()])
frozenset({frozenset()})

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to