Preservando a visão numpy quando decapagem

Por padrão, decodificar uma matriz de visualização numpy perde o relacionamento de exibição, mesmo se a base da matriz também for decapada. Minha situação é que eu tenho alguns objetos contêineres complexos que são decapados. E, em alguns casos, alguns dados contidos são vistos em outros. Salvar uma matriz independente de cada visualização não é apenas uma perda de espaço, mas também os dados recarregados perderam a relação de exibição.

Um exemplo simples seria (mas no meu caso o container é mais complexo que um dicionário):

import numpy as np
import cPickle

tmp = np.zeros(2)
d1 = dict(a=tmp,b=tmp[:])    # d1 to be saved: b is a view on a

pickled = cPickle.dumps(d1)
d2 = cPickle.loads(pickled)  # d2 reloaded copy of d1 container

print 'd1 before:', d1
d1['b'][:] = 1
print 'd1 after: ', d1

print 'd2 before:', d2
d2['b'][:] = 1
print 'd2 after: ', d2

qual imprimiria:

d1 before: {'a': array([ 0.,  0.]), 'b': array([ 0.,  0.])}
d1 after:  {'a': array([ 1.,  1.]), 'b': array([ 1.,  1.])}
d2 before: {'a': array([ 0.,  0.]), 'b': array([ 0.,  0.])}
d2 after:  {'a': array([ 0.,  0.]), 'b': array([ 1.,  1.])} # not a view anymore

Minha pergunta:

(1) Existe uma maneira de preservá-lo? (2) (melhor ainda) existe uma maneira de fazer isso apenas se a base estiver em conserva

Para o (1) eu acho que pode haver alguma maneira, alterando o__setstate__, __reduce_ex_, etc ... da matriz de exibição. Mas eu não me preocupo com isso por enquanto. Para o (2) não tenho ideia.

questionAnswers(1)

yourAnswerToTheQuestion