Python Set discard() Method

set.discard() removes one item from a set.

Use it when you want to remove a value safely, even if that value might not be in the set. Unlike set.remove(), discard() does not raise an error for a missing item.

Quick example #

colors = {"red", "blue", "green"}
colors.discard("blue")
print(colors)

colors.discard("yellow")  # no error if missing
print(colors)

Possible output:

{'red', 'green'}
{'red', 'green'}

Use discard() when you want to remove a value from a set safely, even if that value may not exist.

What set.discard() does #

discard():

  • Removes one item from a set
  • Does nothing if the item is not in the set
  • Changes the original set in place
  • Returns None

This means the set itself is updated. Python does not create a new set.

If you are new to sets, see what a set is in Python or how to create a set.

Basic syntax #

my_set.discard(value)
  • my_set is the set you want to change
  • value is the item you want to remove
  • The set must already exist
  • The value must be a valid set element type

Example #

numbers = {1, 2, 3, 4}
numbers.discard(3)
print(numbers)

Output:

{1, 2, 4}

What makes discard() different #

discard() is similar to other set methods, but it behaves differently in an important way.

  • Unlike remove(), discard() does not raise KeyError when the item is missing
  • Unlike pop(), discard() removes a specific item
  • It is useful when you are not sure whether the item exists

discard() vs remove() #

items = {"apple", "banana"}

items.discard("orange")   # no error
print(items)

items.remove("banana")    # removes existing item
print(items)

Output:

{'apple', 'banana'}
{'apple'}

If you call remove() with a missing value, Python raises an error. See KeyError in Python for more help with that case.

What the method returns #

discard() returns None.

That means you should not write code like this:

colors = {"red", "blue", "green"}
result = colors.discard("blue")

print(result)

Output:

None

The changed set is still stored in colors:

colors = {"red", "blue", "green"}
colors.discard("blue")

print(colors)

Output:

{'red', 'green'}

Simple example #

Here is a basic example that removes an existing item.

fruits = {"apple", "banana", "orange"}

print("Before:", fruits)

fruits.discard("banana")

print("After:", fruits)

Output:

Before: {'banana', 'apple', 'orange'}
After: {'apple', 'orange'}

The order of items in a set may look different on your computer because sets are unordered.

Example with a missing item #

One of the most useful features of discard() is that it does not fail if the item is missing.

fruits = {"apple", "banana", "orange"}

fruits.discard("grape")

print(fruits)

Output:

{'banana', 'apple', 'orange'}

No error happens here.

This is helpful in beginner code because you do not need to check first:

if "grape" in fruits:
    fruits.remove("grape")

With discard(), you can simply write:

fruits.discard("grape")

When to use discard() #

Use discard() when:

  • Missing values are normal
  • You want simple, safe removal
  • You do not want to write an existence check first

It is a good choice when your program does not care whether the value was already missing.

Common mistakes #

Here are some common beginner mistakes with discard().

Expecting discard() to return the changed set #

This is wrong:

numbers = {1, 2, 3}
numbers = numbers.discard(2)

print(numbers)

numbers becomes None because discard() returns None.

Use this instead:

numbers = {1, 2, 3}
numbers.discard(2)

print(numbers)

Confusing discard() with remove() #

If you want to avoid errors for missing values, use discard().

letters = {"a", "b", "c"}
letters.discard("z")   # safe
print(letters)

If you use remove("z"), Python raises a KeyError.

Trying to use discard() on a list instead of a set #

discard() is a set method, not a list method.

Wrong:

items = [1, 2, 3]
items.discard(2)

Use a set if you need discard():

items = {1, 2, 3}
items.discard(2)
print(items)

Passing an unhashable value such as a list #

Set items must be hashable. A list is not hashable.

This causes an error:

data = {1, 2, 3}
data.discard([2])

Use a valid set element type instead, such as a number, string, or tuple.

Helpful debugging checks #

If discard() is not working as expected, these quick checks can help:

print(my_set)
print(type(my_set))
print(value in my_set)
help(set.discard)

These checks help you confirm:

  • What is currently in the set
  • Whether the variable is really a set
  • Whether the value exists before removal
  • How Python documents the method

FAQ #

What happens if the item is not in the set? #

Nothing happens. discard() does not raise an error when the item is missing.

What does set.discard() return? #

It returns None. It changes the original set instead of creating a new one.

What is the difference between discard() and remove()? #

Both remove items from a set. remove() raises KeyError if the item is missing, but discard() does not.

Can I use discard() with lists or dictionaries? #

No. discard() is a set method, so it works on set objects.

See also #

Press Esc to close