On 3/25/2014 9:36 AM, Steven D'Aprano wrote:

Yes, Python could have changed the meaning of {} to mean the empty set.
But you know what? The empty set is not that important. Sets are not
fundamental to Python. Python didn't even have sets until 2.3, and at
first they were just a standard library module, not even built-in.

Leaving aside the fact that dicts are, conceptually, specialized sets of ordered pairs in which first members are both unique to equality and, in Python, hashable, this is all true.

Dicts, on the other hand, are fundamental to Python.  > They are used 
everywhere.

I would rather say that functions/mappings are fundamental to Python, and in programming in general. Dicts are functions implemented as sets. Lists and tuples are functions implemented as tables (ordered sets). Callables are functions implemented as rules. The fact that functions as sets (dicts) are both extremely useful and not built-in to most languages, makes their presence in Python a major differentiating feature.

Python is, in a very real sense, built on dicts, not sets.

It is build on functions, but dicts are a differentiating features. The 'problem' with sets as sets is that they are purely featureless data structures.

> You can implement sets starting from dicts,
> but not the other way around:

You should be more careful about claiming impossibility;-).
Sets can be easily implemented from dicts because dicts are sets with an extra feature (the value associated with each key) that is easily ignored (or always set to the key or None). To implement a dict class starting with sets would be difficult because CPython sets and dicts are implemented in C and one cannot reach into their C internals from Python, or even (mostly) with the C API. One would have to implement or even simulate the C structures and code in Python and the result would be much slower.

> dicts are more fundamental than sets.

One can easily implement floats from complex numbers by making the .imag part always 0. It would be much harder to implement complex numbers from floats, for the same reasons that it would be hard to implements dicts from sets. But it must be possible. Would you say that complex numbers are, because of this implementation quirk, more fundamental than floats?

I'm sure it is awfully impressive that mathematicians can derive the laws
of integer maths starting only from the empty set ∅, but as far as
programming goes that's not a very useful thing.

I agree. Deriving counts and integers from 0 and an increment function is much more apropos to how we use then to describe and drive algorithms and prove things about them.

--
Terry Jan Reedy


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

Reply via email to