我希望下面的代码可以初始化dict_adict_bdict_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/

10-10 08:43