【问题标题】:Why OrderedDict has this behavior [duplicate]为什么 OrderedDict 有这种行为[重复]
【发布时间】:2014-02-10 10:51:59
【问题描述】:

在 Python 2.7 中,我使用 OrderedDict 有这种行为

from collections import *
id(OrderedDict())
42101904
id(OrderedDict())
42071680
id(OrderedDict())
42071680
id(OrderedDict())
42071680
id(OrderedDict())
42071680

为什么?

【问题讨论】:

  • @AshwiniChaudhary:很好的发现;我忘了我之前回答过这个。 :-)
  • 谢谢你们,但现在我有点困惑了。我正在尝试生成 OrderedDict 嵌套结构以使用 xmltodict 生成 xml。所以我从子元素中调用子元素以将它们附加到父元素。当我多次调用该方法时,我会得到额外的元素。虽然显然变量没有存储在对象内部。
  • @user3292520:这是一个完全不同的问题。你可以提出一个新问题,但一定要包含一个很好的小样本来重现你看到的行为。
  • 我会这么做的,谢谢你的帮助。

标签: python python-collections


【解决方案1】:

这不是特定于 OrderedDict(),Python 正在重用释放内存来存储新对象。

来自id() function documentation

返回对象的“身份”。这是一个整数(或长整数),保证此对象在其生命周期内是唯一且恒定的。生命周期不重叠的两个对象可能具有相同的id() 值。

您正在创建一个OrderedDict() 对象仅为id() 调用,当该调用完成时,没有其他引用该对象了。因此它会再次从内存中删除,下一次您运行id(OrderedDict()) 时会在完全相同的内存位置创建一个新对象。

【讨论】:

    【解决方案2】:

    这就是 id() 函数的作用,它返回一个对象的唯一标识符,你正在创建多个对象,所以你会得到不同的 id。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多