2017-07-22 62 views

回答

17

Python的CPython實現存儲函數中用作優化的常量值(例如數字,字符串,元組或frozensets)。您可以通過func.__code__.co_consts觀察他們:

>>> def get_tuple(): 
...  return (1,) 
... 
>>> get_tuple.__code__.co_consts 
(None, 1, (1,)) 

正如你可以看到,這個功能的常量None(這是默認的返回值),1(1,)得到保存。由於該函數返回其中的一個,因此每次調用都會得到完全相同的對象。

因爲這是一個CPython實現細節,所以不能由Python語言保證。這可能是爲什麼你不能在文檔中找到它:)

0

也許是因爲內存中的地址。只是嘗試通過 print memory address of Python variable

+3

@Kristofee是每個調用它返回相同的,但我不明白爲什麼,因爲我期望每個函數調用將返回新的對象。 –

6

Python優化返回值。
因爲解釋器很容易看到返回的元組每次都是相同的,並且它是不可變的對象,它將返回相同的對象(完全相同的內存地址)。
在這裏,當你做a is b你其實問id(a) == id(b)

+1

你知道如何在Python文檔中找到它嗎? –

+7

重要的是要注意Python的特定*實現*可以執行這樣的優化。這種語言本身並沒有這樣的保證。 – chepner

相關問題