Python列表疑问:修改B列表为何会影响已追加元素的A列表?
问题解答:修改B列表为何影响A列表?
核心原因是:Python中的字典是可变对象,你添加到A里的不是字典的副本,而是字典的引用。
具体拆解:
- 当你执行
A.append(elem)时,并没有把B里的字典复制一份存到A中,只是把这个字典在内存中的地址(引用)存进了A。这意味着,A和B里的对应元素指向的是同一个字典对象。 - 第二个循环里修改
elem['x'],本质是直接修改了那个共享的字典对象——不管是从B的elem访问,还是从A的元素访问,都是操作同一个内存里的字典,所以A的内容自然会跟着变。
如果想让A和B完全独立,你需要给A添加字典的副本,而不是引用。可以用以下两种常见方式:
- 调用字典的
copy()方法:A.append(elem.copy()) - 用
dict()构造新字典:A.append(dict(elem))
修改后的代码示例:
A = [] B=[{'x':10},{'x':30}] for elem in B: A.append(elem.copy()) # 添加字典副本 for elem in B: elem['x']=elem['x']-1 print(A) # 输出 [{'x': 10}, {'x': 30}],不受B修改影响
内容的提问来源于stack exchange,提问作者PavelX
相关产品推荐
相关产品推荐

