python(2.7.10)で,list内の検索をする際

In[1]: a = [1,2,3,3,3,4,5]
In[2]: a.index(3)
Out[2]: 2

と最初のインデックスが返ってきます.
理想は[2,3,4]と全ての該当インデックスが欲しいのですが,簡単な書き方で取得できる方法はありませんか.

今のところ可能な限り要素を検索しつつ取得した場所を取り除き続けるという力技をしていますがもう少し簡潔でメモリに優しい方法はないでしょうか
(元のリストはそのままにしておきたいのでdeepcopyをしていますがメモリを食ってしまうようで大きいリストで大量に実行すると止まってしまいます…)

from copy import deepcopy
b = deepcopy(a)
ans = []
while True:
  try:   
    ans.append(b.index(3))
    b.pop(b.index(3))
  except:
    break