`[]`

= empty `list`

`()`

= empty `tuple`

`{}`

= empty `dict`

Is there a similar notation for an empty `set`

?
Or do I have to write `set()`

?

Skip to content
# python – Empty set literal?

## The Question :

*497 people think this question is useful*
*The Question Comments :*
## The Answer 1

*566 people think this answer is useful*
## The Answer 2

*65 people think this answer is useful*
## The Answer 3

*47 people think this answer is useful*
## The Answer 4

*6 people think this answer is useful*
## The Answer 5

*6 people think this answer is useful*
## The Answer 6

*3 people think this answer is useful*
## The Answer 7

*-2 people think this answer is useful*

2021-01-13

`[]`

= empty `list`

`()`

= empty `tuple`

`{}`

= empty `dict`

Is there a similar notation for an empty `set`

?
Or do I have to write `set()`

?

- you don’t accept {i for i in []}, didn’t you?
- Just want to show nearly anything is possible with python. If you want to create a set without using to set(), you can.
- Yeah, you can do pretty much everything in a hundred convulted ways. I don’t add
`map(lambda x: x)`

to my code examples just to show you it works either. It’s not a set literal as well, it’s just a set comprehension. - A dumb way which works would be
`{0}-{0}`

. It’s not as clear as`set()`

, but it does have the advantage of looking like a funny pair of eyes. - @Chris
`{}`

is a dictionary.`{0}`

is a set.`{0} - {0}`

is the difference between a set and itself, which is the empty set.

No, there’s no literal syntax for the empty set. You have to write `set()`

.

By all means, *please use* `set()`

to create an empty set.

But, if you want to impress people, tell them that you can create an empty set using literals and `*`

with Python >= 3.5 (see PEP 448) by doing:

>>> s = {*()} # or {*{}} or {*[]} >>> print(s) set()

this is basically a more condensed way of doing `{_ for _ in ()}`

, but, don’t do this.

Just to extend the accepted answer:

From version `2.7`

and `3.1`

python has got `set`

literal `{}`

in form of usage `{1,2,3}`

, but `{}`

itself still used for empty dict.

Python 2.7 (first line is invalid in Python <2.7)

>>> {1,2,3}.__class__ <type 'set'> >>> {}.__class__ <type 'dict'>

Python 3.x

>>> {1,4,5}.__class__ <class 'set'> >>> {}.__class__ <type 'dict'>

More here: https://docs.python.org/3/whatsnew/2.7.html#other-language-changes

It depends on if you want the literal for a comparison, or for assignment.

If you want to make an existing set empty, you can use the `.clear()`

metod, especially if you want to avoid creating a new object. If you want to do a comparison, use `set()`

or check if the length is 0.

example:

#create a new set a=set([1,2,3,'foo','bar']) #or, using a literal: a={1,2,3,'foo','bar'} #create an empty set a=set() #or, use the clear method a.clear() #comparison to a new blank set if a==set(): #do something #length-checking comparison if len(a)==0: #do something

Yes. The same notation that works for non-empty dict/set works for empty ones.

Notice the difference between non-empty `dict`

and `set`

literals:

`{1: 'a', 2: 'b', 3: 'c'}`

— a number of key-value pairs inside makes a `dict`

`{'aaa', 'bbb', 'ccc'}`

— a **tuple** of values inside makes a `set`

So:

`{}`

== zero number of key-value pairs == empty `dict`

`{*()}`

== empty tuple of values == empty `set`

However the fact, that you can do it, doesn’t mean you should. Unless you have some strong reasons, it’s better to construct an empty set explicitly, like:

a = set()

## Performance:

The

literalis~15% fasterthan theset-constructor (CPython-3.8, 2019 PC, Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz):>>> %timeit ({*()} & {*()}) | {*()} 214 ns ± 1.26 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) >>> %timeit (set() & set()) | set() 252 ns ± 0.566 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)… and for completeness,

Renato Garcia’s`frozenset`

proposal on the above expression is some60% faster!>>> ϕ = frozenset() >>> %timeit (ϕ & ϕ) | ϕ 100 ns ± 0.51 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

**NB**: As *ctrueden* noticed in comments, `{()}`

is **not** an empty set. It’s a set with 1 element: empty tuple.

Adding to the crazy ideas: with Python 3 accepting unicode identifiers, you could declare a variable `ϕ = frozenset()`

(ϕ is U+03D5) and use it instead.

There are few ways to create empty Set in Python :

- Using set() method

This is the built-in method in python that creates Empty set in that variable. - Using clear() method (creative Engineer Technique LOL)

See this Example:

sets={“Hi”,”How”,”are”,”You”,”All”}

type(sets) (This Line Output : set)

sets.clear()

print(sets) (This Line Output : {})

type(sets) (This Line Output : set)

So, This are 2 ways to create empty Set.