Usa llaves para inicializar un conjunto en Python

Estoy aprendiendo python, y tengo una pregunta de principiante sobre la inicialización de conjuntos. A través de las pruebas, he descubierto que un conjunto se puede inicializar así:

my_set = {'foo', 'bar', 'baz'} 

¿Hay alguna desventaja de hacerlo de esta manera, en oposición a la forma estándar de:

 my_set = set(['foo', 'bar', 'baz']) 

¿O es solo una cuestión de estilo?

Hay dos problemas obvios con la syntax literal del conjunto:

 my_set = {'foo', 'bar', 'baz'} 
  1. No está disponible antes de Python 2.7

  2. No hay forma de express un conjunto vacío usando esa syntax (usar {} crea un dict vacío)

Esos pueden o no ser importantes para ti.

La sección de los documentos que describe esta syntax está aquí .

Compara también la diferencia entre {} y set() con un argumento de una sola palabra.

 >>> a = set('aardvark') >>> a {'d', 'v', 'a', 'r', 'k'} >>> b = {'aardvark'} >>> b {'aardvark'} 

pero tanto a como b son conjuntos, por supuesto.

De la documentación de Python 3 ( lo mismo se aplica a python 2.7 ):

Se pueden utilizar llaves o la función set () para crear conjuntos. Nota: para crear un conjunto vacío debe usar set (), no {}; el último crea un diccionario vacío, una estructura de datos que discutimos en la siguiente sección.

en python 2.7:

 >>> my_set = {'foo', 'bar', 'baz', 'baz', 'foo'} >>> my_set set(['bar', 'foo', 'baz']) 

Tenga en cuenta que {} también se usa para map / dict :

 >>> m = {'a':2,3:'d'} >>> m[3] 'd' >>> m={} >>> type(m)  

También se puede utilizar la syntax completa para inicializar conjuntos:

 >>> a = {x for x in """didn't know about {} and sets """ if x not in 'set' } >>> a set(['a', ' ', 'b', 'd', "'", 'i', 'k', 'o', 'n', 'u', 'w', '{', '}'])