1 回答

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