首页 > 编程知识 正文

宅子后面有坑的化解方法,祛痘坑的有效安全方法

时间:2023-05-04 18:41:26 阅读:196857 作者:928

python dict.fromkeys方法的坑

今天在排查bug的时候踩了一个dict.fromkeys方法的坑,xhdbl一下。业务逻辑中有一段用到了dict.fromkeys创建初始值为空列表的字典,之后根据不同key更新列表内容,类似下面的示例:

#!/usr/mdxn/env python

# -*- coding:utf-8 -*-

class_list = ['class01', 'calss02', 'class03']

total_info = dict.fromkeys(class_list, ['teacher_wang'])

print(total_info) # {'class01': ['teacher_wang'], 'calss02': ['teacher_wang'], 'class03': ['teacher_wang']}

for key, value in total_info.items():

print(id(value))

# 创建的total_info 的value值指向同一块内存空间,这就有些类似浅拷贝了

total_info['class01'].append('student_lihua')

print(total_info) # {'class01': ['teacher_wang', 'student_lihua'], 'calss02': ['teacher_wang', 'student_lihua'], 'class03': ['teacher_wang', 'student_lihua']}

如何解决这个方法?使用字典生成表达式来初始化字典值为空列表的字典,如下:

#!/usr/mdxn/env python

# -*- coding:utf-8 -*-

class_list = ['class01', 'calss02', 'class03']

total_info = {key: [] for key in class_list}

total_info['class01'].append('teacher_wang')

print(total_info) # {'class01': ['teacher_wang'], 'calss02': [], 'class03': []}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。