python中有一種賦值機制即多元賦值,採用這種方式賦值時,等號兩邊的對象都是元組而且元組的小括號是可選的。一般形式爲html
x, y, z = 1, 2, 'a string'
等同於 (x, y, z) = (1, 2, 'a string') python
這種賦值類型最常常用到的環境是變量交換,形如c++
x, y = y, x
這種交換方式無需中間變量便可交換兩個變量的值。那麼具體實現機制是怎樣的呢?spa
運行時,首先構造一個元組(y, x),而後構造另外一個元組(x, y),接着用元組(y, x)賦值給(x, y),元組賦值過程從左到右,依次進行。code
這裏有個錯誤猜想: 假如x=1,y=2,先令x=y,此時x=2,而後令y=x,y應該等於2? 那麼就不能實現變量交換了?htm
顯然這個猜想是錯誤的, 對於這個問題,應該從元組的特性提及。對象
x, y, z = 1, 2, 'a string' tuple = (x, y, z)
變量名x, y, z都是引用,內存開闢除了三個空間分別存儲1, 2, 'a string',三個變量實質是個地址,分別指向這3個內容。blog
可是由這三個變量構造的元組tuple,它有三個元素,這三個元素並非x,y,z這三個變量, 即不是3個地址,而是這三個變量所指向的地址空間裏的內容。內存
若是此時再另x=4,此時在地址空間會另開闢出一塊空間存儲4,x進而指向這塊空間,而tuple元組內的x則實質是4。string
因此對於 x, y = y, x 來講,首先由y,x所構成的元組(y,x)其實應該表示爲(2,1),那麼再從左到右賦值,就能夠交換變量的值了
還有一點須要指出, 當咱們使用時,咱們輸入tuple[0]等時, 實際上tuple[0]是地址, 可是當咱們輸入後再回車, python自動顯示這個地址所顯示的內容.
多元賦值的補充:
將多個變量同時賦值的方法咱們稱爲多元賦值(multuple)。將 "mul-tuple"連在一塊兒自造的。由於採用這種方式賦值時, 等號兩邊的對象都是元組。
Python 的多元賦值方式能夠實現無需中間變量交換兩個變量的值, 這點和c或c++不一樣!
python:
#pyhon編寫 x, y = 1, 2 print(x,y) x,y=y,x print(x,y)
輸出結果:
1 2
2 1
C或C++:
#c+編寫
int x=1; int y=2; print("%d %d",&x,&y); int tmp=x; x=y; y=tmp; print("%d %d",&x,&y);
輸出結果:
1 2 2 1
原文出處:https://www.cnblogs.com/yinzhi/p/11609025.html