我剛開始學習Python並碰到了id()內建方法。 我發現它甚至爲id返回一個值(「sudgfkasdfgalds9834710931934019734216834jefhdkdj」)。爲什麼python中的id()也返回一個文字值
根據我對Python教程的理解,也從What does id() function used for?得知,id()返回一個內存地址。那麼爲什麼一個內存地址被返回任何一個甚至沒有分配給任何變量的隨機值。
我剛開始學習Python並碰到了id()內建方法。 我發現它甚至爲id返回一個值(「sudgfkasdfgalds9834710931934019734216834jefhdkdj」)。爲什麼python中的id()也返回一個文字值
根據我對Python教程的理解,也從What does id() function used for?得知,id()返回一個內存地址。那麼爲什麼一個內存地址被返回任何一個甚至沒有分配給任何變量的隨機值。
它返回您調用的參數的實際id
。我的意思是,如果您撥打id('c')
,它會在您每次撥打電話時返回不同的值。
Python的本質不同於像C這樣的語言,其中變量是或多或少的內存位置。
在Python中,變量賦值可以被認爲是將一個標籤賦值給一個對象。沒有標籤引用的對象最終會被垃圾回收器回收。多個標籤可以指向同一個對象。
請看下面:
In [1]: a = 1
In [2]: b = 1
In [3]: id(a), id(b)
Out[3]: (34377130320, 34377130320)
兩個a
和b
引用相同的對象。
請注意,在Python中某些類型的對象(如數字和字符串)是不可變的。你不能改變他們的實例。請參閱:incementing
In [4]: a += 1
In [5]: id(a)
Out[5]: 34377130352
後,a
指向不同的對象。另外,當CPython啓動時,它會爲經常使用的小整數(如0-100)創建對象。這些對象比通常與整數關聯的對象要大得多。還請注意,使用內存地址作爲id
是CPython實現細節。因此,在CPython的我們可以做到:
In [6]: id(2) - id(1)
Out[6]: 32
In [7]: (id(100) - id(0))/32
Out[7]: 100.0
因此,在這種情況下,(64位的FreeBSD OS,CPython的3.6)的整數對象爲32個字節。
由於文字具有存儲地址。 – DeepSpace