2014-02-10 53 views
0

在Python 2.7我有OrderedDict为什么OrderedDict有这种行为

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

为什么这种行为?

+1

@AshwiniChaudhary:很好找;我忘了我以前回答过这个问题。 :-) –

+0

谢谢你们,但现在我有点困惑。我试图生成OrderedDict嵌套结构来生成xmltodict xml。所以我从子元素调用子元素将它们追加到父元素。当我多次调用该方法时,我会获得额外的元素。虽然显然变量不存储在对象内部。 – luisfernando

+1

@ user3292520:这是一个完全*不同的问题。你可以提出一个新的问题,但要包含一个很好的小样本来重现你所看到的行为。 –

回答

4

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

id() function documentation

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

你只为id()呼叫创建OrderedDict()对象,并调用完成时有没有别的引用对象了。它因此被从内存中再次移除,并且下一个运行时间id(OrderedDict())在完全相同的内存位置创建一个新对象。

1

这就是id()函数所做的事情,它返回一个对象的唯一标识符,您正在创建多个对象,因此您将获得不同的ID。

相关问题