1 回答

TA貢獻1789條經驗 獲得超8個贊
你不能,但原因是如此根本,我認為無論如何都值得發布。在 C 語言中,一個指針可以指向任何變量,包括另一個指針。(另一種指針變量,即:你可以寫&p
,但不能寫&(p+1)
。)在 Python 中,每個變量都是一個指針,但每個指針都指向一個對象。
不是對象的變量不能是指針的引用。然而,變量可以是對象的一部分o.foo
,可以作為或訪問o[bar]
(其中 bar 可能是索引或字典鍵)。事實上,除局部變量外,每個變量都是這樣一個對象組件;作為推論,不可能從任何其他函數分配給局部變量。相比之下,C 通過傳遞&local
給任何其他函數來定期執行此操作。(“任何其他函數”有一個例外:nonlocal
可以分配變量,但嵌套函數中使用的每個局部變量都是通過隱式創建一個cell
對象作為變量的基礎值并將變量的用法解釋為引用來實現的一個它的屬性?。?/strong>
C++ 容器很容易說明這種區別:它們通常提供operator[]
返回一個引用(一個指針,像 Python 引用一樣,自動取消引用)到一個=
可以應用的元素,而 Python 等價物是提供兩者__getitem__
(返回一個參考)和(它一次__setitem__
實現所有存儲到一個變量)。[]=
當然,在 CPython 的實現中,每個 Python 變量都是一個PyObject*
變量,a PyObject**
to one 可以用于內部目的,但那些總是臨時的,甚至在 Python 級別概念上都不存在。因此,對他們來說沒有等價物id
。
添加回答
舉報