<p>问题就在这里</p>
<p>当你这么做的时候</p>
<p><code>test_dict = {test.key: object_mapper for test in test_list}</code></p>
<p>输出为</p>
<pre><code>{1: {'ClassNotRelevant': None, 'TestClass': None, 'ClassNotRelevant2': None},
2: {'ClassNotRelevant': None, 'TestClass': None, 'ClassNotRelevant2': None},
3: {'ClassNotRelevant': None, 'TestClass': None, 'ClassNotRelevant2': None}}
</code></pre>
<p>这个<code>{'ClassNotRelevant': None, 'TestClass': None, 'ClassNotRelevant2': None}</code>是与键'1 2 3'对应的同一个对象(<code>object_mapper</code>)</p>
<p>因此,当您使用此更新时:</p>
<pre><code>for test in test_list:
test_dict[test.key]['TestClass']= test.value
</code></pre>
<p>这将更新<code>object_mapper</code>对象,以便</p>
<p>第一次迭代后:</p>
<pre><code>{1: {'ClassNotRelevant': None, 'TestClass': 'a', 'ClassNotRelevant2': None},
2: {'ClassNotRelevant': None, 'TestClass': 'a', 'ClassNotRelevant2': None},
3: {'ClassNotRelevant': None, 'TestClass': 'a', 'ClassNotRelevant2': None}}
</code></pre>
<p>第二次迭代</p>
<pre><code>{1: {'ClassNotRelevant': None, 'TestClass': 'b', 'ClassNotRelevant2': None},
2: {'ClassNotRelevant': None, 'TestClass': 'b', 'ClassNotRelevant2': None},
3: {'ClassNotRelevant': None, 'TestClass': 'b', 'ClassNotRelevant2': None}}
</code></pre>
<p>第三次迭代</p>
<pre><code>{1: {'ClassNotRelevant': None, 'TestClass': 'c', 'ClassNotRelevant2': None},
2: {'ClassNotRelevant': None, 'TestClass': 'c', 'ClassNotRelevant2': None},
3: {'ClassNotRelevant': None, 'TestClass': 'c', 'ClassNotRelevant2': None}}
</code></pre>
<p>所以不是</p>
<p><code>test_dict = {test.key: object_mapper for test in test_list}</code></p>
<p>使用</p>
<p><code>test_dict = {test.key: object_mapper.copy() for test in test_list}</code></p>
<p>它将为每个条目创建<code>shallow_copy</code>个<code>object_mapper</code>对象,而不是将<code>object_mapper</code>对象本身放在那里</p>