python的元組存儲的實質和多元賦值


python中有一種賦值機制即多元賦值,采用這種方式賦值時,等號兩邊的對象都是元組並且元組的小括號是可選的。通常形式為

x, y, z = 1, 2, 'a string'

 

等同於 (x, y, z) = (1, 2, 'a string') 

這種賦值類型最經常用到的環境是變量交換,形如

x, y = y, x

 

這種交換方式無需中間變量即可交換兩個變量的值。那么具體實現機制是怎樣的呢?

運行時,首先構造一個元組(y, x),然后構造另一個元組(x, y),接着用元組(y, x)賦值給(x, y),元組賦值過程從左到右,依次進行。

這里有個錯誤猜測:   假如x=1,y=2,先令x=y,此時x=2,然后令y=x,y應該等於2?  那么就不能實現變量交換了?

顯然這個猜測是錯誤的,  對於這個問題,應該從元組的特性說起。

x, y, z = 1, 2, 'a string'

tuple = (x, y, z)

 

變量名x, y, z都是引用,內存開辟除了三個空間分別存儲1, 2, 'a string',三個變量實質是個地址,分別指向這3個內容。

但是由這三個變量構造的元組tuple,它有三個元素,這三個元素並不是x,y,z這三個變量,  即不是3個地址,而是這三個變量所指向的地址空間里的內容。

如果此時再另x=4,此時在地址空間會另開辟出一塊空間存儲4,x進而指向這塊空間,而tuple元組內的x則實質是4。

所以對於 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM