python - 更新一个嵌套字典也会更新另一个嵌套字典

标签 python dictionary

我有一个嵌套字典,但是当我更新一个字典时,所有其他字典也会更新。我怎样才能避免这种情况?下面是一个例子:

a = {}
b = {'d': [], 'e': []}
a[1] = b
a[2] = b
a[1]['e'].append([1, 2, 3])

# result: {1: {'e': [[1, 2, 3]], 'd': []}, 2: {'e': [[1, 2, 3]], 'd': []}}

此处 'e' 在 1 和 2 上均已更新,但我只想更新 1:

{1: {'e': [[1, 2, 3]], 'd': []}, 2: {'e': [], 'd': []}}

最佳答案

发生克隆更新是因为它们都是相同的字典,附加到不同的键。情况并非如此(如您所愿),每本词典都彼此不同。因此,如果您确实想要单独的 dict,这里有一种方法:

In [57]: def getDict():
    ...:     return {'d':[],'e':[]}
    ...: 

In [58]: a={}

In [59]: a[1] = getDict()

In [60]: a[2] = getDict()

In [61]: a[1]['e'].append([1,2,3])

In [62]: a
Out[62]: {1: {'d': [], 'e': [[1, 2, 3]]}, 2: {'d': [], 'e': []}}

关于python - 更新一个嵌套字典也会更新另一个嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417064/

相关文章:

python - 就地修改文本文件的最佳方法是什么?

c++ - 如何使用 SWIG 为 C++ 类提供 Python __repr__()

带有 Python 排序模块的 Python lambda 函数

python - 按索引分配多个返回值会影响 Python 中的性能吗?

python - 为什么 PEP8 声明导入通常应该在不同的行上?

python - Flask-WTF 使用 input=submit 而不是 button type=submit

list - Ansible - 如果用户已经在其他组中,则从组 x 中删除用户

python - P4Python : AttributeError: type object 'P4' has no attribute 'Map'

java - 映射字符串数组

java - 将多个映射序列到一个文件