python dict.fromkeys方法的坑
今天在排查bug的時候踩了一個dict.fromkeys方法的坑,mark一下。業務邏輯中有一段用到了dict.fromkeys創建初始值為空列表的字典,之后根據不同key更新列表內容,類似下面的示例:
#!/usr/bin/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/bin/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': []}