U may also want to mention that #5 is pretty much violated in all of these if say a nested dict (or really any other object that is by reference) is in default or user.<p><pre><code>  &gt;&gt;&gt; x = {&#x27;a&#x27;: {}}
  &gt;&gt;&gt; y = x.copy()
  &gt;&gt;&gt; y[&#x27;a&#x27;][&#x27;b&#x27;] = &#x27;c&#x27;
  &gt;&gt;&gt; x
  {&#x27;a&#x27;: {&#x27;b&#x27;: &#x27;c&#x27;}}</code></pre>