我轉載下網上說的比較明白的文章內容吧:
個人理解部分:總的來說python中所有變量都是保存引用地址的,不是直接保存值。然後
a,b=b,a這條代碼對應python解釋器解析後的是多條機器指令,它的執行順序是先將右邊的b,a的變量引用地址bb,aa加載出來,然後分別a指向bb,b指向aa,這樣就完成了值的交換,
而不能簡單的理解成先執行b=a,再執行a=b,兩者是不同的
以下是轉載截取:
Python的變量並不直接存儲值,而只是引用壹個內存地址,交換變量時,只是交換了引用的地址。
先看下面這段程序:
import?disdef?func(a,b):
a,b=b,a
print(a,b)
a=10
b=20
func(a,b)
dis.dis(func)
壹般來說壹個Python語句會對應若幹字節碼指令,Python的字節碼是壹種類似匯編指令的中間語言,但是壹個字節碼指令並不是對應壹個機器指 令(二進制指令),而是對應壹段C代碼,而不同的指令的性能不同,所以不能單獨通過指令數量來判斷代碼的性能,而是要通過查看調用比較頻繁的指令的代碼來 確認壹段程序的性能。?
壹個Python的程序會有若幹代碼塊組成,例如壹個Python文件會是壹個代碼塊,壹個類,壹個函數都是壹個代碼塊,壹個代碼塊會對應壹個運行的上下文環境以及壹系列的字節碼指令。
dis的作用?
dis模塊主要是用來分析字節碼的壹個內置模塊,經常會用到的方法是dis.dis([bytesource]),參數為壹個代碼塊,可以得到這個代碼塊對應的字節碼指令序列。
代碼輸出結果?
其中只看前面為12的結果就行了(在我的編譯器裏,交換的那壹行代碼在第12行)
可以看出主要是ROT_TWO指令的功勞:?
查閱python文檔可以知道有ROT_TWO (源碼1398行),ROT_THREE(源碼1406行), ROT_FOUR這樣的指令,可以直接交換兩個變量、三個變量、四個變量的值?
---------------------?
作者:土豆洋芋山藥蛋?
來源:CSDN?
原文:/qq_33414271/article/details/78522235?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!