Python中如何添加指定数量的独立空字典到列表?
为什么
[{}]*3会导致所有字典同步变化?怎么正确创建多个独立空字典的列表? 问题原因
这是Python里可变对象结合列表乘法机制的典型“坑”,我给你拆解清楚:
当你执行d = [{}]*3时,Python并没有生成3个独立的空字典。列表乘法的核心逻辑是重复原列表中元素的引用——原列表里只有一个空字典对象,所以新列表的三个元素其实都是指向同一个字典的“指针”。就像给同一个盒子贴了三张标签,不管你通过哪张标签修改盒子里的东西,另外两张标签对应的盒子内容自然也会跟着变。
看你给出的示例就能明白:
>>> d = [{}]*3 >>> d[0]["x"] = 43 >>> d [{'x': 43}, {'x': 43}, {'x': 43}]
你通过d[0]修改的是那个唯一的字典,d[1]和d[2]只是这个字典的另外两个引用,所以它们显示的都是同一个字典的最新状态。
创建多个独立空字典的最佳方法
要让列表里的每个字典都是独立个体,你需要每次迭代都创建一个全新的空字典,最常用且简洁的方式是用列表推导式:
>>> d = [{} for _ in range(3)] >>> d[0]["x"] = 43 >>> d [{'x': 43}, {}, {}]
这里range(3)循环3次,每次都会执行{}生成一个新的空字典,所以列表里的三个元素是完全独立的对象,修改其中一个绝不会影响其他。
如果你想更明确地表达“创建新字典”的意图,也可以用dict()替代{},效果完全一致:
d = [dict() for _ in range(3)]
内容的提问来源于stack exchange,提问作者Sahand
相关产品推荐
相关产品推荐

