为了账号安全,请及时绑定邮箱和手机立即绑定

Python通过分配复制?

Python通过分配复制?

红颜莎娜 2019-08-08 15:42:41
Python通过分配复制?我希望下面的代码只会初始化dict_a,dict_b以及dict_c字典。但它接触到副本通过效果:dict_a = dict_b = dict_c = {}dict_c['hello'] = 'goodbye'print dict_aprint dict_bprint dict_c如您所见,结果如下:{'hello': 'goodbye'}{'hello': 'goodbye'}{'hello': 'goodbye'}为什么该程序会给出以前的结果,当我希望它返回时:{}{}{'hello': 'goodbye'}
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

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


查看完整回答
反对 回复 2019-08-08
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

即使

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


查看完整回答
反对 回复 2019-08-08
?
慕森卡

TA贡献1806条经验 获得超8个赞

正如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'}>>>


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 383 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信