Python - 如何将字典作为值传递给defaultdict而不是作为引用

sat*_*nam 5 python hash dictionary pass-by-reference defaultdict

所以说我有一个字典,其默认值是另一个字典

attributes = { 'first_name': None, 'last_name': None, 'calls': 0 }
accounts = defaultdict(lambda: attributes)
Run Code Online (Sandbox Code Playgroud)

问题是我传递给defaultdict(属性)的默认字典作为引用传递.我如何将其作为值传递?因此,更改一个键中的值不会更改其他键中的值

例如 -

accounts[1]['calls'] = accounts[1]['calls'] + 1
accounts[2]['calls'] = accounts[2]['calls'] + 1
print accounts[1]['calls'] # prints 2
print accounts[2]['calls'] # prints 2
Run Code Online (Sandbox Code Playgroud)

我希望他们每个人都打印1,因为我只增加了他们各自的"调用"值一次.

war*_*iuc 8

尝试:

accounts = defaultdict(attributes.copy)
Run Code Online (Sandbox Code Playgroud)

因为Python 3.3 lists小号也有copy方法,这样你就可以如上面使用同样的方式defaultdict■当你需要一个字典与列表作为默认值.

  • ooooooo非常聪明! (3认同)