列表字典中 随机一个字典增加 key ,再放入新列表中。出现预期不符。 直接上代码
aaa = [
{'id': 35,'src':'xxx'},
{'id': 36,'src':'xxx'},
{'id': 37,'src':'xxx'},
{'id': 38,'src':'xxx'},
]
combinations = []
for i in range(5):
cname = f'张三-{i}'
ccc = random.choice(aaa)
ccc.update({'cname': cname})
print(ccc) # 这里的结果符合预期
combinations.append(ccc)
print(combinations) # 但是这里就错了
返回结果
{'id': 37, 'src': 'xxx', 'cname': '张三-0'}
{'id': 38, 'src': 'xxx', 'cname': '张三-1'}
{'id': 35, 'src': 'xxx', 'cname': '张三-2'}
{'id': 38, 'src': 'xxx', 'cname': '张三-3'}
{'id': 36, 'src': 'xxx', 'cname': '张三-4'}
# 以上 print 结果是对的
[{'id': 37, 'src': 'xxx', 'cname': '张三-0'}, {'id': 38, 'src': 'xxx', 'cname': '张三-3'}, {'id': 35, 'src': 'xxx', 'cname': '张三-2'}, {'id': 38, 'src': 'xxx', 'cname': '张三-3'}, {'id': 36, 'src': 'xxx', 'cname': '张三-4'}]
# 但是这里打印新生成的 combinations 列表就出现两个 `张三-3`
后来想起来是引用对象问题,需要浅复制下.即只需要将 ccc = random.choice(aaa)
改为ccc = random.choice(aaa).copy()
就符合预期了.
bug 问题在于示例里,单个 print 结果和添加到列表里的结果不一致.
python 版本 3.10.8
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.