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:
Answer from myaut on Stack OverflowI 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.
dictionary - Difference between dict and set (python) - Stack Overflow
When should I use a list, dictionary, tuple, or set in Python?
What's the difference between a dictionary and a set?
Set, tuple and dictionary. What are the differences?
They seem similar to each other (the use of brackets{} ) Could someone explain their differences?
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.
The syntax is not the same. Dictionaries used curly braces the first and you specify key-value pairs, where the key and value are separated by a colon:
>>> {'foo': 'bar'}
{'foo': 'bar'}
>>> type(_)
<type 'dict'>
Sets were added to the language later on, and the {..} curly brace notation only names elements, not pairs:
>>> {'foo'}
set(['foo'])
>>> type(_)
<type 'set'>
Note that in Python 2, the interpreter echoes the object using the set() callable. That's also how you specify an empty set:
>>> emptyset = set()
In Python 3, the newer {..} notation is used when echoing the object, unless it is empty:
>>> {'foo'}
{'foo'}
>>> _ - {'foo'} # difference, removing the one element
set()
The set() type was added to the Python language in version 2.4 (see PEP 218), the curly brace syntax for set literals was added in Python 3 and back-ported to Python 2.7.