Python通过分配复制?

Python通过分配复制?

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


红颜莎娜
浏览 387回答 3
3回答

慕慕森

这是因为在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}>>>

ABOUTYOU

即使>>> 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)]注意:不要使用[{} for x in range(6)]

慕森卡

正如danben先前所说,你只是将同一个dict复制到3个变量中,这样每个变量都会引用同一个对象。要获得所需的行为,您应该在每个变量中实例化不同的dict:>>> dict_a, dict_b, dict_c = {}, {}, {}>>> dict_c['hello'] = 'goodbye'>>> print dict_a{}>>> print dict_b{}>>> print dict_c{'hello': 'goodbye'}>>>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python