2014-04-22 32 views
0

我在Windows7上運行python 2.7。python弱引用repr中的第二個數字是什麼?

在下面,爲什麼弱參考表示中的第二個數字與id(f)不同?

import weakref 

class Foo(object): 
    pass 

f = Foo() 
w = weakref.ref(f) 
print("id(f): %s"%(id(f),)) 
print("w: %s"%(w,)) 

>>> 36036400 
>>> w: <weakref at 022649F0; to 'Foo' at 0225DF30> 

既然是說,弱引用是指富「at 0225DF30」我不得不說,雖然這個數字將是f的地址,這在CPython的應該是一樣的ID。

+1

'十六進制(36036400)''=='0x225df30 「'。又是什麼問題? –

+1

不需要嗤之以鼻:) – DanielSank

回答

2

你似乎期望id(f)顯示相同的數字,如果你只是打印出f。這是不是這樣,如本例所示:

>>> f 
<__main__.Foo object at 0x10929df10> 
>>> id(f) 
4448706320 
>>> w 
<weakref at 0x10928cfc8; to 'Foo' at 0x10929df10> 
>>> id(w) 
4448636872 

未在你的例子顯示的另一件事是,在w輸出的'Foo'位置是十六進制。

>>> print 0x10929df10 
4448706320 

從你給我們使用的數字:

>>> print 0x0225DF30 
36036400 

所以你可以看到,數字實際上是相同的;只是它在一個地方以十六進制顯示,而在另一個地方以十進制顯示。

+0

'id(w)'與weakref'w'指向什麼都沒有關係。 – roippi

+0

如果在提及十六進制與十進制表示的部分中使用了與示例中相同的數字,此答案將更清晰。 – DanielSank

+0

@DanielSank好點。我使用的是OPs號碼,所以我清楚地說明了這一點,並添加了我的示例中的數字。 –

3

的整數36036400相同的十六進制0x225df30:

In [10]: hex(36036400) 
Out[10]: '0x225df30' 

In [11]: 36036400 == 0x225df30 
Out[11]: True 

你可以使用%x看到id(f)十六進制表示:

In [12]: print("id(f): %x"%(36036400,)) 
id(f): 225df30 
相關問題