title: Deep copy of a np.array of np.array
body: <p>I have a numpy array of different numpy arrays and I want to make a deep copy of the arrays. I found out the following:</p>
  
  <pre><code>import numpy as np
  
  pairs = [(2, 3), (3, 4), (4, 5)]
  array_of_arrays = np.array([np.arange(a*b).reshape(a,b) for (a, b) in pairs])
  
  a = array_of_arrays[:] # Does not work
  b = array_of_arrays[:][:] # Does not work
  c = np.array(array_of_arrays, copy=True) # Does not work
  d = np.array([np.array(x, copy=True) for x in array_of_arrays])
  
  array_of_arrays[0][0,0] = 100
  print a[0][0,0], b[0][0,0], c[0][0,0], d[0][0,0]
  </code></pre>
  
  <p>Is d the best way to do this? Is there a deep copy function I missed?
  And what is the best way to interact with each element in this array of different sized arrays?</p>