Remove list element without mutation

I assume you mean that you want to create a new list without a given element, instead of changing the original list. One way is to use a list comprehension:

m = ['a', 'b', 'c']
n = [x for x in m if x != 'a']

n is now a copy of m, but without the 'a' element.

Another way would of course be to copy the list first

m = ['a', 'b', 'c']
n = m[:]
n.remove('a')

If removing a value by index, it is even simpler

n = m[:index] + m[index+1:]

There is a simple way to do that using built-in function :filter .

Here is ax example:

a = [1, 2, 3, 4]
b = filter(lambda x: x != 3, a)

If the order is unimportant, you can use set (besides, the removal seems to be fast in sets):

list(set(m) - set(['a']))

This will remove duplicate elements from your original list though