2017-03-16 80 views
0

有人能解釋爲什麼我的變量x返回到它的這些步驟後,前ID:爲什麼Python中的變量在來回轉換之後返回到原ID?

>>> x = 10 
>>> id(x) 
497834400 
>>> x = str(x) 
>>> id(x) 
48840576 
>>> x = int(x) 
>>> id(x) 
497834400 
+0

x'的'轉換之前和之後的值是相同數量的10.這就是爲什麼它具有相同的ID。 – DyZ

+1

@DYZ雖然對於對象通常不是真的,但對於在-5到256之間的整數,僅在CPython上纔是真實的 –

+0

@ juanpa.arrivillaga我沒有推廣到_objects_,我只是提出了10的索賠。我同意你的其他評論。 – DyZ

回答

3

Python從[-5, 256]緩存整數,這意味着(在同一運行時間內)上述範圍內的整數始終具有相同的id

看到這個question,它是偉大的answer更多細節。

+1

非常有趣。用x = 300進行測試後,ID確實發生了變化。 – None

-2

變量int數據類型爲壽命和x的生命週期中可用還沒有完成。 實際上,它通過將x轉換回int來指向x的int類型。

1

因爲10是python中所謂的小整數。 Python會將[-5,257)之間的小整數緩存在名爲「small_ints」的池中。所以[-5,257]中的整數實例都是在整個python中共享的,這就是id(10)總是返回相同地址的原因。

0
What is the number returned from the function id() ? 

它是「這是保證其壽命期間該對象獨特和恆定的整數(或長整數)。」 (Python標準庫 - 內置函數)唯一編號。沒有更多,也沒有少。把它看作是Python對象的社會安全號碼或員工身份號碼。

Is it the same with memory addresses in C ? 

從概念上講,是的,他們都保證在其一生中,在他們的宇宙獨一無二的。在Python的一個特定實現中,它實際上是相應C對象的內存地址。

what-does-id-function-used-for