To be clear: Copying blobs in pycaffe works in the usual numpy way. Evan elided the ".data" accessor in his assignment; the important difference is between attribute assignment and numpy slice assignment.
If you write
blob.data = some_array
you are doing attribute assignment; you are saying "hey net, instead of using the memory you were using before for that blob, use this other memory I have here". This is not allowed (with certain exceptions). If you write
blob.data[...] = some_array
you are doing numpy slice assignment; you are saying "hey net, copy the memory I have here into the memory you've already allocated for that blob". That is what you want.
(If you don't include ".data" at all, you assigning an ndarray to a Blob, which doesn't make sense; a Blob holds two different ndarrays.)
JLL