不,你不能。正如其他答案所指出的,你可以(ab?)使用可變物件的別名來實現類似的效果。然而,這與c++引用不一樣,我想解釋一下實際上發生了什麼,以避免任何誤解。<>你可以看到,在c++(和其他語言)中,變數(和物件字段,以及集合中的條目等)是乙個儲存位置,並且你可以將乙個值(例如,乙個整數、乙個物件或乙個指標)寫入那個位置。在這個模型中,引用是儲存位置(任何型別)的別名—當您分配給非引用變數時,您將乙個值(即使它只是乙個指標,它仍然是乙個值)複製到儲存位置;當您分配給引用時,您將複製到其他位置的儲存位置。注意,你不能改變乙個引用本身——一旦它被繫結(而且一旦你建立了它就必須如此),對它的所有賦值都不會改變引用,而是改變被引用的內容。
在python(和其他語言)中,變數(和物件字段,以及集合中的條目等)只是乙個名稱。值是某處eme>其他(例如,堆堆上到處都是噴出),變數引用(不是c++引用的意義,更像指標減去指標算術)到值。多個名稱可以引用同乙個值(這通常是件好事)。python(和其他語言)呼叫引用引用值所需的任何內容,儘管與c++引用和傳遞引用無關。賦值給變數(或物件字段,或…)只會使它引用另乙個值。整個儲存位置模型不適用於python,程式設計師從不為值處理儲存位置。他所儲存的和隨機處理的都是python引用,而這些不是python中的值,因此它們不能成為其他python引用的目標。
所有這些都與值的可變性無關——例如,對於int和list也是一樣的。不能接受引用其中乙個的變數,並覆蓋它所指向的物件。您只能告訴物件修改其自身的部分,例如,更改它包含的某些引用。
這是一種更嚴格的模式嗎?也許吧,但它在大多數時候都足夠強大。如果不是這樣的話,您可以使用下面給出的自定義類,或者(等效的,但不太明顯的)單個元素集合來解決它。class reference:
def __init__(self, val):
self._value = val # just refers to val, no copy
def get(self):
return self._value
def set(self, val):
self._value = val
這仍然不允許您將「常規」變數或物件字段別名為,但是您可以有多個變數引用同乙個reference物件(對於可變的單例集合替代項也是如此)。你只要小心使用.get()/.set()(或者[0])。
python變數賦值
從python2.0開始 等號可以和乙個算術操作符組合在一起,將計算結果重新賦值給左邊的變數,這被稱為增量賦值,類似下面的語句 x x 1 現在可以被寫作 x 1增量賦值相對普通賦值不僅僅是寫法上的改變,最有意義的變化是第乙個物件,金盃處理一次,可變物件會被就地修改 無修拷貝引用 不可變物件則和a ...
python 變數賦值
對於變數的內容再去傳遞,傳遞的是物件,有的傳遞物件本身,有的傳遞物件引用。可變資料型別 列表 字典。a 1,2,3 b a c a a 0 8 d 8,2,3 print a 8,2,3 print b 8,2,3 print c 1,2,3 print d 8,2,3 print id a 140...
Python 變數型別 變數賦值
變數賦值 python 中的變數賦值不需要型別宣告。每個變數在記憶體中建立,都包括變數的標識,名稱和資料這些資訊。每個變數在使用前都必須賦值,變數賦值以後該變數才會被建立。等號 用來給變數賦值。等號 運算子左邊是乙個變數名,等號 運算子右邊是儲存在變數中的值。例如 例項 python 2.0 usr...