# Python working with set data type

Lets start working with set data type in python. Set is a heterogeneous un-ordered set of elements with no repetition. set data structure is also just like frozensets. The only difference between sets and frozensets is sets are immutable where as frozensets are not mmutable in nature.  we can use sets to checking of membership and eleminating the repetitive/duplicate elements. Sets support operations like union, symmetric difference, intersection and difference.

## Basic operations of Sets in python

• Create a set with  and without elements
```# create empty set
s2 = set()  # set() -> new empty set object
# create set with elements
s1 = {1,2,3,4,"hi", 1.24}
s2 = set([1,2,3,4,"hi", 1.24])  # set(iterable) -> new set object
print(type(s1))
# Output: <class 'set'>
print(type(s2))
# Output: <class 'set'>```
```s1 = {1,2,3, 3, 3}
print(s1)
# Output: {1, 2, 3, 100, 98}
```
As we can see above set do not contains duplicate elements and it is a unordered set of elements.
• Remove element from set
```s1 = {1,2,100}
s1.remove(100)
print(s1)
# Output: {1,2}
```
remove method in set can take the element and removes from the set.

## Working with Sets methods in python

• Working with "clear" method in sets in python
```s1 = {1,2,3}
s1.clear()
print(s1)
# Output: {}
```
Remove all elements from this set. It means simply making the set to empty.
• Working with "copy" method in sets in python
```s1 = {1,2,3}
s2 = s1.copy()
print(s1)
# output: {1,2,3}
print(s2)
# Output: {1,2,3,100}
print(id(s1), id(s2))
# Output: 139732324395720 139732306460744
```
Return a shallow copy of a set.
• Working with "difference" method in sets in python
```s1 = {1,2,3, 100, 200}
s2 = {2, 100}
s3 = s1.difference(s2)
print(s3)
# Output: {200, 1, 3}
```
Return the difference of two or more sets as a new set. There will be no affect on the operating sets(ie. s1, s2). i.e. all elements that are in this set but not the others.
• Working with "difference_update" method in sets in python
```s1 = {1,2,3, 100, 200}
s2 = {2, 100}
s1.difference_update(s2)
print(s1)
# Output: {1, 3, 200}
```
Remove all elements of another set from this set. The method finds the difference and updates the result in the set s1.
• Working with "discard" method in sets in python
```s1 = {1,2,3, 100, 200}
print(s1)
# output: {1,2,3, 200}
```
Remove an element from a set if it is a member. If the element is not a member, do nothing.
• Working with "intersection" method in sets in python
```s1 = {1,2,3, 100, 200}
s2 = {100, 200}
s3 = s1.intersection(s2)
print(s3)
# Output: {200, 100}
```
Return the intersection of two or more sets as a new set(i.e. elements that are common to all of the sets). No affect on sets on s1 and s2.
• Working with "intersection_update" method in sets in python
```s1 = {1,2,3, 100, 200}
s2 = {100, 200}
s1.intersection_update(s2)
print(s1)
# Output: {200, 100}```
Update a set with the intersection of itself and another.
• Working with "isdisjoint" method in sets in python
```s1 = {1,2,3, 100, 200}
s2 = {500, 400}
result = s1.isdisjoint(s2)
print(result)
# Output: True
s3 = {100, 200}
result = s1.isdisjoint(s3)
print(result)
# Output: False
```
Return True if two sets have a null intersection.
• Working with "issubset" method in sets in python
```s1 = {1,2,3, 100, 200}
s2 = {500, 400}
result = s1.issubset(s2)
print(result)
# Output: False
s3 = {1,2,3}
result = s3.issubset(s1)
print(result)
# Output: True
```
Report whether another set contains this set.
• Working with "issuperset" method in sets in python
```s1 = {1,2,3, 100, 200}
s2 = {500, 400}
result = s1.issuperset(s2)
print(result)
# Output: False
s3 = {1,2,3}
result = s1.issuperset(s3)
print(result)
# Output: True```
Report whether this set contains another set.
• Working with "pop" method in sets in python
```s1 = {1,2,3, 100, 200}
s1.pop()
print(s1)
# Output: {1, 2, 3, 100}
s1 = {}
s1.pop()
# Output: KeyError: 'pop from an empty set'
```
Remove and return an arbitrary set element. Raises KeyError if the set is empty.
• Working with "remove" method in sets in python
```s1 = {1,2,3,100,200}
s1.remove(100)
print(s1)
# output: {200, 1, 2, 3}
s1.remove(500)
# output: KeyError: 500
```
Remove an element from a set; it must be a member. If the element is not a member, raise a KeyError.
• Working with "symmetric_difference" method in sets in python
```s1 = {1,2,3,100,200}
s2 = {5,6,7}
s3 = s1.symmetric_difference(s2)
print(s3)
# Output: {1, 2, 3, 100, 5, 6, 7, 200}
```
Return the symmetric difference of two sets as a new set.(i.e. all elements that are in exactly one of the sets.)
• Working with "symmetric_difference_update" method in sets in python
```s1 = {1,2,3,100,200}
s2 = {5,6,7}
s1.symmetric_difference(s2)
print(s1)
# Output: {1, 2, 3, 100, 5, 6, 7, 200}```
Update a set with the symmetric difference of itself and another.
• Working with "union" method in python
```s1 = {1,2,3,100,200}
s2 = {5,6,7}
s3 = s1.union(s2)
print(s3)
# Output: {1, 2, 3, 100, 5, 6, 7, 200} ```
Return the union of sets as a new set. (i.e. all elements that are in either set.)
• Working with "update" method in python
```s1 = {1,2,3,100,200}
s2 = {5,6,7}
s1.update(s2)
print(s1)
# Output: {1, 2, 3, 100, 5, 6, 7, 200}```
Update a set with the union of itself and others.