# Remove list element without mutation

Assume you have a list

```>>> m = ['a','b','c']
```

I'd like to make a new list n that has everything except for a given item in m (for example the item 'a'). However, when I use

```>>> m.remove('a')
>>> m
m = ['b', 'c']
```

the original list is mutated (the value 'a' is removed from the original list). Is there a way to get a new list sans-'a' without mutating the original? So I mean that m should still be [ 'a', 'b', 'c' ], and I will get a new list, which has to be [ 'b', 'c' ].

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:]
```

You can create a new list without the offending element with a list-comprehension. This will preserve the value of the original list.

```l = ['a','b','c']
[s for s in l if s!='a']
```

Another approach to list comprehension is numpy:

```>>> import numpy
>>> a = [1, 2, 3, 4]
>>> list(numpy.remove(a,a.index(3)))
[1, 2, 4]
```

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)
```

### Differences between TCP sockets and web sockets, one more time

Trying to understand as best as I can the differences between TCP socket and websocket, I've already found a lot of useful information within these questions:

### Does Scala have static imports like Java?

Does Scala support static imports, like Java does?