当我尝试此代码时:
dict_a = dict_b = dict_c = {} dict_c['hello'] = 'goodbye' print(dict_a) print(dict_b) print(dict_c)
我预计它只会初始化dict_a、dict_b和dict_c字典,然后在中分配一个键dict_c,从而导致
dict_a
dict_b
dict_c
{} {} {'hello': 'goodbye'}
但它似乎有一个复制效果:
{'hello': 'goodbye'} {'hello': 'goodbye'} {'hello': 'goodbye'}
为什么?
出现此问题的原因是,该语句dict_a = dict_b = dict_c = {}不会创建三个单独的字典。相反,它使dict_a、dict_b和dict_c都引用同一个字典对象。当您通过一个引用修改字典时,更改会反映在所有引用中,因为它们都指向内存中的同一个对象。
dict_a = dict_b = dict_c = {}
以下是具体发生的步骤:
dict_c['hello'] = 'goodbye'
要创建三个单独的词典,您需要单独分配它们:
dict_a = {} dict_b = {} dict_c = {} dict_c['hello'] = 'goodbye' print(dict_a) # Output: {} print(dict_b) # Output: {} print(dict_c) # Output: {'hello': 'goodbye'}
或者,如果您想创建副本,您可以使用该copy方法:
copy
dict_a = {} dict_b = dict_a.copy() dict_c = dict_a.copy() dict_c['hello'] = 'goodbye' print(dict_a) # Output: {} print(dict_b) # Output: {} print(dict_c) # Output: {'hello': 'goodbye'}
使用该copy方法可以确保dict_b和dict_c一开始是浅拷贝,dict_a但是是独立的对象。这样,修改一个字典不会影响其他字典。