Python在赋值时会复制对象吗?

8 浏览
0 Comments

Python在赋值时会复制对象吗?

当我尝试这段代码时:

dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'
print(dict_a)
print(dict_b)
print(dict_c)

我期望它只是初始化dict_adict_bdict_c字典,然后将一个键分配给dict_c,结果是

{}
{}
{'hello': 'goodbye'}

但实际上它似乎具有复制传递的效果:

{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}

为什么呢?

admin 更改状态以发布 2023年5月24日
0
0 Comments

即使在大多数情况下,

>>> 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)]

0
0 Comments

这是因为在Python中,变量(名称)只是对单个对象的引用。当您赋值dict_a = dict_b时,您实际上是将一个内存地址(或指针,如果您愿意)从dict_b复制到dict_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}
>>> 

0