Python复制通过分配?
我期望下面的代码只是初始化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中,variables(名称)只是对单个对象的引用。 当你分配dict_a = dict_b
,你真的是从dict_b
到dict_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。