小编典典

Python是否在分配时复制对象?

python

我希望下面的代码只会初始化dict_adict_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'}

阅读 165

收藏
2020-12-20

共1个答案

小编典典

这是因为在Python中,变量(名称)只是对单个对象的引用。当您指定dict_a = dict_b,你真的复制存储器地址(或指针,如果你愿意)从dict_bdict_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}
>>>
2020-12-20