You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表中字典元素引用异常:修改后所有字典内容完全一致

问题产生原因

你使用[MyDict] * 5创建列表时,由于Python的字典属于可变对象,该操作并不会生成5个独立的字典副本,只是将同一个MyDict对象的内存引用复制了5次存入列表。也就是说列表里的5个元素本质上指向同一个字典实例,你修改任意一个元素的字段值,本质都是修改同一个内存地址里的字典内容,最终所有列表元素读取到的自然是最后一次修改的结果。

解决方法
  • 方案1:创建列表时循环生成独立的字典实例
    不要预先定义单个MyDict再乘倍数,直接在列表推导式里每次生成新的字典即可:
import random

Rows = [
    {
        'Name': '',
        'Address': '',
        'SSN': ''
    }
    for _ in range(5)
]

print('We iterate through each item, and change the SSN value to a random number, printing as we go')
for i in range(len(Rows)):
    Rows[i]['SSN']= random.randint(0,999)
    print(Rows[i])

print('Printing at the end, all values are different as expected:')
for i in Rows:
    print(i)
  • 方案2:使用字典的copy()方法生成浅拷贝
    如果需要复用预先定义的字典模板,可以调用字典的copy()方法生成独立副本:
import random

MyDict = {
    'Name': '',
    'Address': '',
    'SSN': ''
}
# 每次循环都生成独立的浅拷贝
Rows = [MyDict.copy() for _ in range(5)]

print('We iterate through each item, and change the SSN value to a random number, printing as we go')
for i in range(len(Rows)):
    Rows[i]['SSN']= random.randint(0,999)
    print(Rows[i])

print('Printing at the end, all values are different as expected:')
for i in Rows:
    print(i)

如果字典模板包含嵌套列表、嵌套字典等可变类型时,copy()方法只能拷贝外层结构,内层可变对象仍会共享引用,这时需要导入copy模块调用copy.deepcopy(MyDict)生成完全独立的深拷贝实例。

内容的提问来源于stack exchange,提问作者Phil Ip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:45:02