2 回答
TA贡献1812条经验 获得超5个赞
发生克隆更新是因为它们都是同一个字典,附加到不同的键。并非如此(如您所愿),每本字典都彼此不同。所以,如果你真的想要单独dict的 s,这里有一种方法:
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': []}}
TA贡献1895条经验 获得超3个赞
这是预期的行为。当你这样做时:
a = {}
b = {'d': [], 'e': []}
a[1] = b
a[2] = b
实际上,a[1] “持有”对 b 的引用。当您修改 a1 中的 b 时,您正在修改“原始”b。如果你想让一个全新的 b 独立修改,使用 copy。如果您的实际 dict 比这更复杂,您可以使用 deepcopy 或自己编写一个复制功能。
a = {}
b = {'d': [], 'e': []}
a[1] = b.copy()
a[2] = b.copy()
a[1]['e'].append([1, 2, 3])
你也可以这样做:
a = {}
b = {'d': [], 'e': []}
a[1] = b[:]
a[2] = b[:]
a[1]['e'].append([1, 2, 3])
这可以按您的预期工作。
添加回答
举报