Python生成含card_name、card_type键的字典列表问题
问题原因
代码在循环外提前定义了全局字典comb,所有循环操作修改的都是同一个字典对象,追加到card_deck列表里的元素全是指向这个字典的引用。循环结束后,字典存储的是最后一次循环赋值的内容,因此列表里所有元素看起来完全一致。
修复方法
不要复用循环外的同一个字典,每次生成卡牌组合时新建独立的字典对象即可,修正后代码:
suits = [ 'Clubs', 'Diamonds', 'Hearts', 'Spades', ] cards = [ 'Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', ] card_deck = [] for card_name in cards: for suit in suits: # 每次循环初始化新字典,避免复用同一对象 comb = { 'card_name': card_name, 'card_type': suit } card_deck.append(comb) print(card_deck)
额外提示
- Python中字典、列表属于可变对象,变量赋值传递的是对象内存引用,不是独立副本,多个引用指向同一对象时,修改操作会同步影响所有引用的取值
- 如果一定要提前定义字典模板,也可以在追加时传入字典的浅拷贝:
card_deck.append(comb.copy()),但当前场景下直接在循环内新建字典可读性更高
内容的提问来源于stack exchange,提问作者Elias Sarah
相关产品推荐
相关产品推荐

