Python复制通过分配?

我期望下面的代码只是初始化dict_adict_bdict_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中,variables(名称)只是对单个对象的引用。 当你分配dict_a = dict_b ,你真的是从dict_bdict_a复制一个内存地址(或指针,如果你愿意的话)。 这个词典还有一个例子。

要获得所需的行为,请使用dict.copy方法,或者如果您的字典可能嵌套了字典或其他嵌套对象,请使用copy.deepcopy

 >>> a = {1:2} >>> b = a.copy() >>> b {1: 2} >>> b[3] = 4 >>> a {1: 2} >>> b {1: 2, 3: 4} >>> 

即使

 >>> dict_a, dict_b, dict_c = {}, {}, {} 

在大多数情况下是正确的方法,当它超过3时看起来很奇怪

想像

 >>> a, b, c, d, e, f = {}, {}, {}, {}, {}, {} 

如果我想要初始化3个以上的东西,我可以使用

 >>> a, b, c, d, e, f, = [dict() for x in range(6)] 

小心 :请勿[{} for x in range(6)]

正如丹本先前所说,你只是将相同的字典复制到3个variables,以便每个人都受到相同的对象。

为了得到你想要的行为,你应该在每个variables中使用不同的字典:

 >>> dict_a, dict_b, dict_c = {}, {}, {} >>> dict_c['hello'] = 'goodbye' >>> print dict_a {} >>> print dict_b {} >>> print dict_c {'hello': 'goodbye'} >>> 

您的第一个任务将相同的字典对象分配给variablesdict_a,dict_b和dict_c。 这相当于dict_c = {}; dict_b = dict_c; dict_a = dict_c。