# set
# set和dict类似，也是一组key的集合，但不存储value。由于key不能重复，所以，在set中，没有重复的key
# set可以看成数学意义上的无序和无重复元素的集合

# 要创建一个set，需要提供一个list作为输入集合
s=set([1,2,3])
print(s)
# {1, 2, 3}
#注意，传入的参数[1, 2, 3]是一个list，而显示的{1, 2, 3}只是告诉你这个set内部有1，2，3这3个元素，
#显示的顺序也不表示set是有序的。

#重复元素在set中自动被过滤
s=set([1,1,2,2,3])
print(s)
# {1, 2, 3}

# add(key)方法可以添加元素到set中，可以重复添加，但不会有效果
s.add(5)
print(s)
# {1, 2, 3, 5}

s.add(2)
print(s)
# {1, 2, 3, 5}


# 通过remove(key)方法可以删除元素
s.remove(3)
print(s)
# {1, 2, 5}

# set可以看成数学意义上的无序和无重复元素的集合，因此，两个set可以做数学意义上的交集、并集等操作
s1=set([1,2,3])
s2=set([2,3,4])
print(s1 & s2)
# {2, 3}

print(s1 | s2)
# {1, 2, 3, 4}

# 与dict一样 set内的key值 也不能是list    list是可变对象

# 对于不变对象来说，调用对象自身的任意方法，也不会改变该对象自身的内容。相反，这些方法会创建新的对
# 象并返回，这样，就保证了不可变对象本身永远是不可变的。