title: Why np.arrays and lists work with `allow_pickle=False`, but dictionaries do not?
body: <p>This question involves <code>np.save</code> and <code>np.load</code> best practices. Since the newer numpy version 1.16.3, the default in <code>np.load</code> is set to <code>allow_pickle=False</code>. </p>
  
  <p>After saving a list, the further load declaration works just fine with the default <code>allow_pickle=False</code>:</p>
  
  <pre><code>&gt;&gt; x = [0, 1, 2]                            
  &gt;&gt; np.save('my_x_list.npy', x)                
  &gt;&gt; loaded_x = np.load('my_x_list.npy') 
  &gt;&gt; loaded_x                        
  Out: array([0, 1, 2])
  </code></pre>
  
  <p>The same holds for a numpy array:</p>
  
  <pre><code>&gt;&gt; y = np.arange(10)                            
  &gt;&gt; np.save('my_y_numpy_array.npy', y)                
  &gt;&gt; loaded_y = np.load('my_y_numpy_array.npy') 
  &gt;&gt; loaded_y                          
  Out: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  </code></pre>
  
  <p>However, a dictionary yields this error:</p>
  
  <pre><code>&gt;&gt; mydict = {'a': 4, 'b': 5}
  &gt;&gt; np.save('my_dict.npy', mydict)
  &gt;&gt; loaded_z = np.load('my_z_dict.npy')
  ValueError: Object arrays cannot be loaded when allow_pickle=False
  </code></pre>
  
  <p>As far as I understand, dictionaries, lists and numpy arrays are all <code>Object arrays</code>. Hence, one would expect numpy arrays or lists to raise this error as well. Why is this error raised with dictionaries and is not raised with numpy arrays or lists ? </p>