a b是否等價a a b?答 不一定等價

2021-10-06 13:53:21 字數 1717 閱讀 6014

自加運算+=,第一次實實在在的聽懂,理解程式設計,那是在大學為了計算機二級上c語言培訓課程的時候,老師對我們講這個運算子時候所用的名詞,同時她還講到a+=b等價a=a+b是等價的運算。今天在python中再次看到+=運算子,得到乙個新的名詞:就地加法。那麼它兩究竟等價與否?我們用幾個例項來驗證。這裡用的是python語法,其他程式設計語法都能實現同樣的效果。

牛頓曾經說過「我之所以能成功,是因為我站在巨人的肩上。」,對待**請記住:「我之所以能看懂,是因為我大腦是cpu做的。」在閱讀**時盡量跳出日常思維方式,不要受到日常腦迴路限制,從而影響對**的理解程度。要準確的分析a+=ba=a+b等價與否,就需要從記憶體的角度去分析兩者對記憶體具體操作。

**片段一:

a = 1

b = 2

a+=b

**片段二:

a = 1

b = 2

a=a+b

**片段一和二分別有:a = 1將常數1賦值給變數a,計算機會為變數a分配乙個記憶體空間。這時我們列印變數a的記憶體位址,接著**片段一進行a+=b運算,接著**片段二以進行a=a+b運算,當運算完後再次列印變數a的記憶體位址。你會發現片段一和片段二分別列印如下內容:

分析結果會得出在進行a+=ba=a+b運算時都對等號左邊的變數a進行了重新分配記憶體空間。得出結論:a+=b在記憶體層面等價a=a+b

「元芳,你怎麼看!」「我看可以結案了。」「那我有幾個問題可以要你回答。」……我也不知道有什麼問題!哈哈……

這裡有一句話送給讀者「不要把勝利看成一成不變的。」……《神探狄仁傑2》

接下來我們再來分析下面兩段程式:

**片段三:

a = [1]

b = [2]

a+=b

**片段四:

a = [1]

b = [2]

a=a+b

**片段三和四分別有:a = [1]將變數a初始化為[1],計算機會為變數a分配乙個記憶體空間。這時我們列印變數a的記憶體位址,接著**片段一進行a+=b運算,接著**片段二以進行a=a+b運算,當運算完後再次列印變數a的記憶體位址。你會發現片段一和片段二分別列印如下內容:

分析結果會得出在進行a+=b運算時都運算子左邊的變數a沿用之前的記憶體空間,a=a+b運算時對賦值符號左邊的變數a進行了重新分配記憶體空間。得出結論:a+=b在記憶體層面不等價a=a+b

因此a+=b運算不一定等價a=a+b運算。判斷兩者是否等價,就需要在記憶體層面進行分析。

通過仔細對上面程式進行徹底分析,暫時可以得出以下結論:

在變數a的內容為不可變資料型別時,兩者是等價的;在變數a的內容為可變資料型別時,兩者是不等價的;ps:就地加法a+=b在某些條件下運算速度快於a=a+b;依次類推+=;-=;*=;/=依然如此。

逃避不一定躲得過,面對不一定最難過

國王有七個女兒,這七位美麗的公主是國王的驕傲。她 們那一頭烏黑亮麗的長髮遠近皆知。所以國王送給她們每人一百個漂亮的髮夾。有一天 早上,大公主醒來,一如往常地用髮夾整理她的秀髮,卻發現少了乙個髮夾,於是她偷偷地到了二公主的房裡,拿走了乙個髮夾。二公主發現少了乙個髮夾,便到三公主房裡拿走乙個髮夾 三公主...

放虎不一定歸山

放虎不一定歸山 魏書侯淵傳 載,北魏大都督侯淵,率領七百騎兵,疾奔襲擊擁兵數萬的葛榮部將韓樓。他孤軍深入敵方腹地,帶著一股銳氣,在距韓樓大本營一百多里地之處,將韓樓的一支五千餘人的部隊一下子就打垮了,還抓了許多俘虜。侯淵沒有將俘虜當 包袱 背,而是將他們放了,還把繳獲的馬上口糧等東西都發還給他們。侯...

成功不一定就是成功

有一天,烏鴉和豬一起坐飛機。豬聽到頭等艙的烏鴉問空姐 小妞,過來,有酒嗎?空姐禮貌的拒絕了,這時烏鴉憤怒地吼道 連這個都沒用開個毛飛機啊?滾!豬覺得成功人士的氣度太牛了。豬一心渴望成功,於是模仿豬的行為 小妞過來,有酒嗎?空姐的回答仍然是拒絕。豬也憤怒地吼 連這個都沒用開什麼飛機?滾!五分鐘以後,飛...