濮阳杆衣贸易有限公司

主頁 > 知識庫 > python 實現(xiàn)兩個變量值進行交換的n種操作

python 實現(xiàn)兩個變量值進行交換的n種操作

熱門標簽:儋州電話機器人 北京電銷外呼系統(tǒng)加盟 北瀚ai電銷機器人官網(wǎng)手機版 所得系統(tǒng)電梯怎樣主板設置外呼 朝陽手機外呼系統(tǒng) 市場上的電銷機器人 地圖標注面積 小蘇云呼電話機器人 佛山400電話辦理

python 兩個變量值交換

方法一:

c = 0
c= a
a= b
b= c

方法二:

a,b = b,a 

這是python的基本方法

方法三:(只用兩個變量實現(xiàn))

a = a+b
b = a-b
a = a-b

python兩個數(shù)值互換(淺析a,b=b,a原理)

python交換兩個值得方法非常簡單,即a,b=b,a,一步操作就交換了兩個值,那么這是為什么呢?

真相:

Python的變量并不直接存儲值,而只是引用一個內(nèi)存地址,交換變量時,只是交換了引用的地址。

先看下面這段程序:

import dis

def func(a,b):
    a,b=b,a
    print(a,b)
    
a=10
b=20
func(a,b)
dis.dis(func)

一般來說一個Python語句會對應若干字節(jié)碼指令,Python的字節(jié)碼是一種類似匯編指令的中間語言,但是一個字節(jié)碼指令并不是對應一個機器指 令(二進制指令),而是對應一段C代碼,而不同的指令的性能不同,所以不能單獨通過指令數(shù)量來判斷代碼的性能,而是要通過查看調(diào)用比較頻繁的指令的代碼來 確認一段程序的性能。

一個Python的程序會有若干代碼塊組成,例如一個Python文件會是一個代碼塊,一個類,一個函數(shù)都是一個代碼塊,一個代碼塊會對應一個運行的上下文環(huán)境以及一系列的字節(jié)碼指令。

dis的作用   

dis模塊主要是用來分析字節(jié)碼的一個內(nèi)置模塊,經(jīng)常會用到的方法是dis.dis([bytesource]),參數(shù)為一個代碼塊,可以得到這個代碼塊對應的字節(jié)碼指令序列。

代碼輸出結果

其中只看前面為12的結果就行了(在我的編譯器里,交換的那一行代碼在第12行)

可以看出主要是ROT_TWO指令的功勞:

查閱python文檔可以知道有ROT_TWO (源碼1398行),ROT_THREE(源碼1406行), ROT_FOUR這樣的指令,可以直接

交換兩個變量、三個變量、四個變量的值

在python3.4的源碼中查閱ceval.c文件可以看到:

TARGET(ROT_TWO) {           
    PyObject *top = TOP();          
    PyObject *second = SECOND();       
    SET_TOP(second);          
    SET_SECOND(top);         
    FAST_DISPATCH();       
}        
TARGET(ROT_THREE) {            
	PyObject *top = TOP();            
	PyObject *third = THIRD();            
	SET_SECOND(third);            
	FAST_DISPATCH();        
}

附:python值的交換

變量的每一次初始化,都開辟了一個新的空間,將新內(nèi)容的地址賦值給變量。對于下圖來說,我們重復的給str1賦值,其實在內(nèi)存中的變化如圖:

從上圖我們可以看出,str1在重復的初始化過程中,是因為str1中存儲的元素地址由'hello world'的地址變成了'new hello world'的。

對于復雜的數(shù)據(jù)類型來說,改變其內(nèi)部的值對于變量的影響:

當對列表中的元素進行一些增刪改的操作的時候,是不會影響到lst1列表本身對于整個列表地址的,只會改變其內(nèi)部元素的地址引用。

可是當我們對于一個列表重新初始化(賦值)的時候,就給lst1這個變量重新賦予了一個地址,覆蓋了原本列表的地址,這個時候,lst1列表的內(nèi)存id就發(fā)生了改變。上面這個道理用在所有復雜的數(shù)據(jù)類型中都是一樣的。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • python交換兩個變量的值方法
  • 對Python中實現(xiàn)兩個數(shù)的值交換的集中方法詳解
  • Python中的四種交換數(shù)值的方法解析
  • Python中變量交換的例子

標簽:酒泉 商丘 定西 江蘇 金融催收 云南 龍巖 寧夏

巨人網(wǎng)絡通訊聲明:本文標題《python 實現(xiàn)兩個變量值進行交換的n種操作》,本文關鍵詞  python,實現(xiàn),兩個,變,量值,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 實現(xiàn)兩個變量值進行交換的n種操作》相關的同類信息!
  • 本頁收集關于python 實現(xiàn)兩個變量值進行交換的n種操作的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    丹阳市| 中江县| 延津县| 灵台县| 砀山县| 南康市| 湘潭县| 浦城县| 招远市| 天台县| 建平县| 太白县| 朝阳市| 略阳县| 赞皇县| 琼海市| 迁西县| 黔南| 峡江县| 当阳市| 青河县| 清流县| 黑龙江省| 南康市| 鸡东县| 杭锦旗| 和林格尔县| 惠水县| 韩城市| 伊通| 鹤壁市| 商城县| 瑞昌市| 和平县| 那曲县| 胶州市| 安泽县| 萨嘎县| 曲阳县| 岳阳市| 台东市|