Python通过分配复制?我希望下面的代码只会初始化dict_a,dict_b以及dict_c字典。但它接触到副本通过效果:dict_a = dict_b = dict_c = {}dict_c['hello'] = 'goodbye'print dict_aprint dict_bprint dict_c如您所见,结果如下:{'hello': 'goodbye'}{'hello': 'goodbye'}{'hello': 'goodbye'}为什么该程序会给出以前的结果,当我希望它返回时:{}{}{'hello': 'goodbye'}
3 回答
慕慕森
TA贡献1856条经验 获得超17个赞
这是因为在Python中,变量(名称)只是对单个对象的引用。当您指定dict_a = dict_b
,你真的复制存储器地址(或指针,如果你愿意)从dict_b
到dict_a
。那个词典还有一个例子。
要获得所需的行为,请使用该dict.copy
方法,或者copy.deepcopy
在您的dict可能具有嵌套的dicts或其他嵌套对象时使用。
>>> a = {1:2}>>> b = a.copy()>>> b{1: 2}>>> b[3] = 4>>> a{1: 2}>>> b{1: 2, 3: 4}>>>
ABOUTYOU
TA贡献1812条经验 获得超5个赞
即使
>>> 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)]
慕森卡
TA贡献1806条经验 获得超8个赞
正如danben先前所说,你只是将同一个dict复制到3个变量中,这样每个变量都会引用同一个对象。
要获得所需的行为,您应该在每个变量中实例化不同的dict:
>>> dict_a, dict_b, dict_c = {}, {}, {}>>> dict_c['hello'] = 'goodbye'>>> print dict_a{}>>> print dict_b{}>>> print dict_c{'hello': 'goodbye'}>>>
添加回答
举报
0/150
提交
取消