导入的字典点击按钮后为何仍为空?
问题:重新赋值导入的字典后仍为空
我从Python文件dictnombre.py导入字典dict_nombre并赋值给变量dict,删除dict中的键值对操作运行正常。但点击按钮bouton_chiffre后,尽管函数nombres会重新将导入的字典赋值给dict,但dict依然是空的。
dictnombre.py 代码
dict_nombre={'un (chiffre)':'yi-', 'deux':'èr', 'trois':'sa-n', 'quatre':'sì', 'cinq':'wû', 'six':'liù', 'sept':'qî', 'huit':'ba-', 'neuf (chiffre)':'jiû', 'dix':'shí' }
主程序相关代码
... import dictnombre ... def nombres(): global dict dict=dictnombre.dict_nombre ... del dict[key_aleatoire] ... bouton_chiffre=Button(cadre_bouton,text="Nombres seulement",width=15,height=1,bg="blue",bd=5, command=nombres) bouton_chiffre.pack(side=LEFT)
问题原因
Python里字典是可变对象,当你第一次执行dict=dictnombre.dict_nombre时,dict和dictnombre.dict_nombre指向的是内存中同一个字典对象。后续的del dict[key_aleatoire]操作直接修改了dictnombre模块里的原始字典——模块导入后其中的变量会被缓存,所以后续再赋值dict=dictnombre.dict_nombre时,拿到的是已经被修改(键值对被删)后的字典。
解决方案
每次赋值时创建原始字典的副本,而不是直接引用:
def nombres(): global dict dict = dictnombre.dict_nombre.copy() # 创建字典副本 ... del dict[key_aleatoire]
这样每次点击按钮,dict都会获取原始字典的全新副本,删除操作只会影响当前副本,不会修改模块里的原始字典,下次点击就能重新拿到完整的字典了。
内容的提问来源于stack exchange,提问作者Meriole
相关产品推荐
相关产品推荐

