Python Copy Through Assignment?
我希望下面的代码只是初始化
1 2 3 4 5 6 | dict_a = dict_b = dict_c = {} dict_c['hello'] = 'goodbye' print dict_a print dict_b print dict_c |
如您所见,结果如下:
1 2 3 | {'hello': 'goodbye'} {'hello': 'goodbye'} {'hello': 'goodbye'} |
当我期望它返回时,为什么那个程序会给出前面的结果:
1 2 3 | {} {} {'hello': 'goodbye'} |
这是因为在Python中,变量(名称)只是对单个对象的引用。当您分配
要获得所需的行为,请使用
1 2 3 4 5 6 7 8 9 10 | >>> a = {1:2} >>> b = a.copy() >>> b {1: 2} >>> b[3] = 4 >>> a {1: 2} >>> b {1: 2, 3: 4} >>> |
尽管
1 | >>> dict_a, dict_b, dict_c = {}, {}, {} |
在大多数情况下是正确的方法,当它超过3时,看起来很奇怪
想象
1 | >>> a, b, c, d, e, f = {}, {}, {}, {}, {}, {} |
如果我想初始化3个以上的东西,我使用
1 | >>> a, b, c, d, e, f, = [dict() for x in range(6)] |
注意:不要使用
正如丹本之前所说,您只是将同一个dict复制到3个变量中,以便每个变量都引用同一个对象。
要获得所需的行为,应在每个变量中声明不同的dict:
1 2 3 4 5 6 7 8 9 | >>> dict_a, dict_b, dict_c = {}, {}, {} >>> dict_c['hello'] = 'goodbye' >>> print dict_a {} >>> print dict_b {} >>> print dict_c {'hello': 'goodbye'} >>> |
您的第一个赋值为变量dict_a、dict_b和dict_c分配相同的dictionary对象。它相当于dict_c=dict_b=dict_c;dict_a=dict_c。