Python Set symmetric_difference() Method
set.symmetric_difference() returns the values that appear in exactly one of two sets.
This is useful when you want to compare two sets and keep only the non-matching values.
Use it when:
- you want items in one set or the other
- you do not want items that appear in both sets
- you need a new set without changing the originals
Quick answer #
a = {1, 2, 3}
b = {3, 4, 5}
result = a.symmetric_difference(b)
print(result) # {1, 2, 4, 5}
Use this when you want values that are in one set or the other, but not in both.
a.symmetric_difference(b) shades both crescents but not the overlap: values in exactly one set.What symmetric_difference() does #
set.symmetric_difference():
- returns a new set
- keeps items that are in only one of the two sets
- removes items that exist in both sets
- does not change the original set
If you are new to sets, see Python sets explained or creating a set in Python.
Basic syntax #
set1.symmetric_difference(set2)
Notes:
set1must be a setset2can be any iterable- the result is always a set
- the most common use is comparing two sets
Example:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
result = set1.symmetric_difference(set2)
print(result)
Output:
{1, 2, 4, 5}
What the result means #
The result includes:
- items only in the first set
- items only in the second set
The result does not include:
- items shared by both sets
For example:
- first set:
{1, 2, 3} - second set:
{3, 4, 5}
The value 3 is in both sets, so it is removed from the result.
The output is:
{1, 2, 4, 5}
Also remember:
- sets are unordered
- Python does not guarantee the printed order of set items
Simple example #
Here is a small example with one shared value:
colors1 = {"red", "blue", "green"}
colors2 = {"green", "yellow"}
result = colors1.symmetric_difference(colors2)
print(result)
Output:
{'red', 'blue', 'yellow'}
What happened here:
"green"is in both sets, so it is excluded"red"and"blue"are only incolors1, so they stay"yellow"is only incolors2, so it stays
symmetric_difference() vs difference() #
These two methods are similar, but they do not do the same thing.
difference():
- keeps items only from the first set
- ignores unique items from the second set
symmetric_difference():
- keeps unique items from both sets
- removes shared items
Example:
a = {1, 2, 3}
b = {3, 4, 5}
print(a.difference(b)) # {1, 2}
print(a.symmetric_difference(b)) # {1, 2, 4, 5}
Use:
difference()for a one-sided comparisonsymmetric_difference()for a two-sided comparison
symmetric_difference() vs union() #
union() combines both sets.
symmetric_difference() only keeps non-shared values.
Example:
a = {1, 2, 3}
b = {3, 4, 5}
print(a.union(b)) # {1, 2, 3, 4, 5}
print(a.symmetric_difference(b)) # {1, 2, 4, 5}
Difference:
union()includes everythingsymmetric_difference()excludes values found in both sets
Use:
union()when overlap does not mattersymmetric_difference()when you want non-matching values only
Using the ^ operator #
For sets, the ^ operator gives the same result as symmetric_difference().
Example:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1.symmetric_difference(set2))
print(set1 ^ set2)
Possible output:
{1, 2, 4, 5}
{1, 2, 4, 5}
Both forms:
- return a new set
- do not change the original sets
For beginners, the method form is often easier to read because the name explains what it does.
Common beginner mistakes #
Here are some common problems when using symmetric_difference():
Expecting sorted output
Sets are unordered, so the result may print in a different order than you expect.Thinking the original set is changed
symmetric_difference()returns a new set. It does not modify the original set.Confusing it with
difference()difference()only keeps items from the first set.symmetric_difference()keeps unique items from both sets.Forgetting that sets remove duplicates
A set only stores unique values. If your original data has repeated values, they will appear only once.
Common causes of confusion include:
- using
symmetric_difference()whenunion()is actually needed - comparing lists instead of converting them to sets first
- assuming repeated values will appear multiple times in the result
- being confused by output order
If you are starting with a list and want unique values first, see how to remove duplicates from a list in Python.
Useful checks while debugging:
print(set1)
print(set2)
print(set1.symmetric_difference(set2))
print(set1 ^ set2)
print(type(set1))
print(type(set2))
FAQ #
Does symmetric_difference() change the original set? #
No. It returns a new set and leaves the original set unchanged.
What is the difference between symmetric_difference() and difference()? #
difference() keeps items only from the first set. symmetric_difference() keeps items that appear in exactly one of the two sets.
Can I use symmetric_difference() with lists? #
The method is for sets. Convert a list to a set first if needed.
Example:
list1 = [1, 2, 3]
list2 = [3, 4, 5]
result = set(list1).symmetric_difference(set(list2))
print(result)
Output:
{1, 2, 4, 5}
Why does the output order look random? #
Sets are unordered, so Python does not guarantee item order.
See also #
- Python sets explained
- Creating a set in Python
- Python set
difference()method - Python set
union()method - How to remove duplicates from a list in Python
If you are learning set methods, compare difference(), union(), and symmetric_difference() side by side. That makes it much easier to choose the right one for real tasks.