python:将字典附加到列表 - 我看到一个类似行为的指针

neo*_*o29 59 python dictionary list

我在python解释器中尝试了以下内容:

>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>
Run Code Online (Sandbox Code Playgroud)

这里,在将字典'b'附加到列表'a'之后,我正在改变字典'a'中与键1对应的值.不知怎的,这种变化也反映在列表中.当我将字典附加到列表中时,我不只是附加字典的值吗?看起来好像我已经将一个指向字典的指针附加到列表中,因此对字典的更改也会反映在列表中.

我不希望更改反映在列表中.我该怎么做?

感谢您的时间!

NPE*_*NPE 111

你的名单中包含对原始字典的引用是正确的.

a.append(b.copy()) 应该做的伎俩.

请记住,这是一个浅的副本.另一种方法是使用copy.deepcopy(b),它可以进行深层复制.

  • 真棒!我被封锁了很长时间 (4认同)
  • 这让我震惊了大约半个小时,直到我放弃并决定查看堆栈。 (3认同)

eyq*_*uem 21

还有dict

a = []
b = {1:'one'}

a.append(dict(b))
print a
b[1]='iuqsdgf'
print a
Run Code Online (Sandbox Code Playgroud)

结果

[{1: 'one'}]
[{1: 'one'}]
Run Code Online (Sandbox Code Playgroud)