In your code W defines the range of the loop but changes inside.
 It can be improved as follows:
 T=Tuples((0,1),4)
W=[matrix(2,2,v) for v in T]
V=W.copy()
[V.remove(s) for s in W if s.is_symmetric()]
V
[
[0 1]  [1 1]  [0 0]  [1 0]  [0 1]  [1 1]  [0 0]  [1 0]
[0 0], [0 0], [1 0], [1 0], [0 1], [0 1], [1 1], [1 1]
]
 but it is better not to construct to many matrices:
 import itertools
def  f():
    f1=lambda x:matrix(2,2,x)
    f2=lambda v:v[1]!=v[2]
    T=(item for item in itertools.product([0,1], repeat=4))
    return list(map(f1,filter(f2,T)))
f()
[
[0 0]  [0 0]  [0 1]  [0 1]  [1 0]  [1 0]  [1 1]  [1 1]
[1 0], [1 1], [0 0], [0 1], [1 0], [1 1], [0 0], [0 1]
]
timeit('f()')
625 loops, best of 3: 40.7 μs per loop
 In intel python, replacing matrix by numpy.array one can obtain two times faster code