我希望下面的代码只会初始化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
Run Code Online (Sandbox Code Playgroud)
如您所见,结果如下:
{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}
Run Code Online (Sandbox Code Playgroud)
为什么该程序会给出以前的结果,当我希望它返回时:
{}
{}
{'hello': 'goodbye'}
Run Code Online (Sandbox Code Playgroud)
dan*_*ben 43
这是因为在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}
>>>
Run Code Online (Sandbox Code Playgroud)
即使
>>> dict_a, dict_b, dict_c = {}, {}, {}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下是正确的方法,当它超过3时看起来很奇怪
想像
>>> a, b, c, d, e, f = {}, {}, {}, {}, {}, {}
Run Code Online (Sandbox Code Playgroud)
如果我想初始化超过3件事,我会使用
>>> a, b, c, d, e, f, = [dict() for x in range(6)]
Run Code Online (Sandbox Code Playgroud)
注意:不要使用__CODE__