我希望下面的代码可以初始化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中,变量(名称)只是对单个对象的引用。分配dict_a = dict_b
时,实际上是将内存地址(或指针,如果需要的话)从dict_b
复制到dict_a
。该词典仍然有一个实例。
要获得所需的行为,请使用dict.copy
方法,或者如果dict可能具有嵌套的dict或其他嵌套的对象,请使用copy.deepcopy
。
>>> a = {1:2}
>>> b = a.copy()
>>> b
{1: 2}
>>> b[3] = 4
>>> a
{1: 2}
>>> b
{1: 2, 3: 4}
>>>
关于python - Python是否在分配时复制对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2438938/