python dict.fromkeys方法的坑


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': []}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM