擅长:python、mysql、java
<p>我能想到的实现您想要的最简单的方法是子类化标准<code>dict</code>类型并重写其<code>__setitem__</code>方法:</p>
<pre><code>class MyDict(dict):
def __setitem__(self, key, value):
raise NotImplementedError("This is a frozen dictionary")
</code></pre>
<p>这允许您创建以后不能通过项目分配更改的词典:</p>
^{pr2}$
<p>或者,相当于:</p>
<pre><code>d = MyDict([(1, 2), (3, 4)])
</code></pre>
<p>然后,dict会像标准dict一样打印出来:</p>
<pre><code>{1: 2, 3: 4}
</code></pre>
<p>但当您尝试更改值(或添加新值)时:</p>
<pre><code>d[1] = 15
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
<ipython-input-21-a22420992053> in <module>()
----> 1 d[1] = 34
<ipython-input-18-03f266502231> in __setitem__(self, key, value)
1 class MyDict(dict):
2 def __setitem__(self, key, value):
----> 3 raise NotImplementedError("This is a frozen dictionary")
NotImplementedError: This is a frozen dictionary
</code></pre>
<p>但是请注意,这并不是完全不变的:</p>
<pre><code>d.update({1:17})
</code></pre>
<p>例如,将更新它,但是这个解决方案可能已经足够好了-它取决于更广泛的需求。在</p>