我希望下面的代码只会初始化dict_a,dict_b以及dict_c字典。但它似乎具有复制效果:
dict_a
dict_b
dict_c
dict_a = dict_b = dict_c = {} dict_c['hello'] = 'goodbye' print dict_a print dict_b print dict_c
如您所见,结果如下:
{'hello': 'goodbye'} {'hello': 'goodbye'} {'hello': 'goodbye'}
为什么该程序会产生先前的结果,当我期望它返回时:
{} {} {'hello': 'goodbye'}
这是因为在Python中,变量(名称)只是对单个对象的引用。当您指定dict_a = dict_b,你真的复制存储器地址(或指针,如果你愿意)从dict_b到dict_a。该词典仍然有一个实例。
dict_a = dict_b
要获得所需的行为,请使用dict.copy方法,或者copy.deepcopy如果您的字典可能具有嵌套的字典或其他嵌套的对象,请使用。
dict.copy
copy.deepcopy
>>> a = {1:2} >>> b = a.copy() >>> b {1: 2} >>> b[3] = 4 >>> a {1: 2} >>> b {1: 2, 3: 4} >>>