有关python生成器转换为集合的问题

图片说明
为什么set((3 for i in range(5)))返回{3}
而x = (3 for i in range(5)) set(x)返回空集合
求赐教 不胜感激!

本质原因是:(3 for i in range(5)) 是一个生成器。
为什么 返回{3}? 因为对内层(3 for i in range(5))这个生成器而言,他每次返回一个3,一共返回五次,然后在set作用下,去重得到{3}。
x = (3 for i in range(5)) set(x)返回空集合,是因为x是一个生成器,在执行过list(x)后,x生成器里的数字被掏空了,
x没有数生成给set,因此set(x)为空集合。
如果没有list(x),set(x)仍旧为{3}