["python","dictionary","set"]
Difference between dict and set (python)

So, I know that this, a = {} # dict constructs an empty dictionary. Now, I also picked up that this, b = {1, 2, 3} # set creates a set. This can easily be verified, as, >>>print(type(a)) <class 'dict'> >>>print(type(b)) <class 'set'> While I understand what it does, I fail to see why we use 'set notation' for empty dictionaries. I tried to find some more information about the logic behind this in the set and dict sections of the manual, but sadly, I got nothing out of it. Could anyone explain to me why we do this in this way? Is it for historical reasons, or am I missing something blatantly obvious?
There were no set literals in Python 2, historically curly braces were only used for dictionaries. Sets could be produced from lists (or any iterables): set([1, 2, 3]) set([i for i in range(1, 3)]) To create an empty set, use my_set = set() Python 3 introduced set literals and comprehensions (see PEP-3100) which allowed us to avoid intermediate lists: {1, 2, 3} {i for i in range(1, 3)} The empty set form, however, was reserved for dictionaries due to backwards compatibility. References from [Python-3000] sets in P3K? states: I'm sure we can work something out --- I agree, {} for empty set and {:} for empty dict would be ideal, were it not for backward compatibility. I liked the "special empty object" idea when I first wrote the PEP (i.e., have {} be something that could turn into either a set or dict), but one of the instructors here convinced me that it would just lead to confusion in newcomers' minds (as well as being a pain to implement). The following message describes these rules better: I think Guido had the best solution. Use set() for empty sets, use {} for empty dicts, use {genexp} for set comprehensions/displays, use {1,2,3} for explicit set literals, and use {k1:v1, k2:v2} for dict literals. We can always add {/} later if demand exceeds distaste.