2016-03-17 34 views
-1

所以我明白,在Python中的一切都是一個對象。我也明白,一個對象是包含信息的內存的一部分。知道這兩件事讓我想知道如何整數可以成爲對象,所以我去挖掘。我發現CPython在啓動時創建了從-5到256的範圍。有人可以幫助澄清整數對象和一些其他的東西

所以,我想知道的是,這是否是正確的,因爲我無法找到答案。 1是一個標識符,指向存儲在那裏的信息值爲1的對象,這個陳述是正確的嗎?另外,如果CPython只創建一個從-5到256的範圍,那麼高於或低於該範圍的整數如何知道存儲在其中的值?字符串和浮游物如何知道存儲在其中的值?

很抱歉,如果這是一個壞的問題,我是新來的編碼,並試圖環繞的術語我的頭,明白什麼是happing當我執行的代碼行。預先感謝您的幫助。

+0

如果你是新的編碼,我覺得你在找太遠的細節:) –

+0

也許是這樣,但我是個充滿好奇心的人哈哈 – Jeff

+0

我GOOGLE了,但到目前爲止,還沒有到你的幻數引用「 - 5'和'256'。 「創造一個範圍」......是什麼?另外,CPython如何管理內存既無關緊要,如有更改,恕不另行通知。除非您是CPython開發人員。 – Muposat

回答

2

整數是對象,因爲一切是一個對象。如果你在圍繞術語位打包大腦,我建議查看Dive Into Python中的「一切都是對象」一章。這裏是最相關的位:

Python中的所有東西都是一個對象,幾乎所有東西都有屬性和方法。所有函數都有一個內置屬性__doc__,它返回函數源代碼中定義的文檔字符串。 sys模塊是一個對象,其中包含一個名爲path的屬性。等等。

不過,這引發了問題。什麼是對象?不同的編程語言以不同的方式定義「對象」。在某些情況下,這意味着所有對象都必須具有屬性和方法;在其他情況下,這意味着所有對象都是可分類的。在Python中,定義更寬鬆;有些對象既沒有屬性,也沒有方法(第3章中有更多內容),並不是所有的對象都是可分類的(第5章的更多內容)。但是從某種意義上說,所有東西都是一個對象,它可以被分配給一個變量或者作爲一個參數傳遞給一個函數(更多內容參見第4章)。

1

所有的Python整數都是對象。它們的值有點複雜,因爲它們可以擴展以支持非常大的數字(大於大多數編程語言中可用的標準32位或64位整數)。這個實現是用C編寫的,你可以找到它here。儘管如此,你並不需要知道或關心實現的細節。 int對象與Python中的其他類型對象非常相似。

整數-5通過256緩存是一個獨立的東西。緩存避免了一遍又一遍重現相同的小整數,但緩存1對象仍然是相同類型的對象爲未緩存int257。只是,每一次你有一個int誰的價值1你處理完全相同的對象,而有可能是同時存在的價值257幾個對象。如果需要,您可以編寫自己的類來執行此類緩存,只需定義返回該類的預先存在的實例的__new__方法即可。緩存是您不需要關心的另一個實現細節。如果Python沒有緩存任何整數,它仍然可以正常工作(它可能會比現在的緩存實現稍微慢一些,並使用更多的內存)。

相關問題