深入理解Python中的*重復(fù)運(yùn)算符
在python中有個(gè)特殊的符號(hào)“*”,可以用做數(shù)值運(yùn)算的乘法算子,也是用作對(duì)象的重復(fù)算子,但在作為重復(fù)算子使用時(shí)一定要注意
注意的是:*重復(fù)出來(lái)的各對(duì)象具有同一個(gè)id,也就是指向在內(nèi)存中同一塊地址,在對(duì)各個(gè)對(duì)象進(jìn)行操作是一定要注意。
舉例來(lái)說(shuō):
>>> alist = [range(3)]*4 >>> alist [[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
上面初始化一個(gè)二層列表用來(lái)模擬矩陣,該矩陣式4X3的,為描述方便,這里記矩陣為A。
現(xiàn)在我想給A11賦值為1,用下面的代碼:
alist[0][0]=1
那我們想要的結(jié)果應(yīng)該是:
[[1, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
可是很不幸,我們得到的是:
[[1, 1, 2], [1, 1, 2], [1, 1, 2], [1, 1, 2]]
這是怎么回事呢,為什么給A21賦值,其他的Ai1為什么都跟著變了呢?
原因是這樣的:
文章開(kāi)始的時(shí)候我們已經(jīng)說(shuō)過(guò)了,*重復(fù)出來(lái)的各對(duì)象具有同一個(gè)id,也就是指向在內(nèi)存中同一塊地址,在對(duì)各個(gè)對(duì)象進(jìn)行操作是一定要注意。
我們?cè)俪跏蓟臅r(shí)候用了重復(fù)算子"*",這個(gè)操作符在對(duì)對(duì)象進(jìn)行重復(fù)操作時(shí),會(huì)將重復(fù)的所有對(duì)象都指向同一塊內(nèi)存地址,所有當(dāng)你改變其中的一個(gè)值時(shí),其他的值自然也會(huì)更新,用python的話進(jìn)行解釋就是下面的命令及輸出:
>>> id(alist[0]) 18858192 >>> id(alist[1]) 18858192 >>> id(alist[2]) 18858192 >>> id(alist[3]) 18858192 >>>
看到了吧,id都是一樣滴,也就是說(shuō)這4個(gè)list是同一個(gè)“l(fā)ist”。
既然這樣那我們想要模擬一個(gè)矩陣怎么辦呢,除了有專門的numpy包之外,你當(dāng)然可以給上層list逐個(gè)的append新的list,例如:
>>> blist=[] >>> for i in range(4): blist.append([j for j in range(3)]) >>> blist [[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
這樣,我們?cè)僭囋嚿厦娴馁x值操作:
>>> blist[0][0]=1 >>> blist [[1, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]] >>>
總結(jié)
以上就是本文關(guān)于深入理解Python中的*重復(fù)運(yùn)算符的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:13個(gè)最常用的Python深度學(xué)習(xí)庫(kù)介紹、python探索之BaseHTTPServer-實(shí)現(xiàn)Web服務(wù)器介紹等,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
使用pycharm將自己項(xiàng)目代碼上傳github(小白教程)
github是一個(gè)代碼托管平臺(tái),本文主要介紹了使用pycharm將自己項(xiàng)目代碼上傳github,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
python計(jì)算寄送包裹重量的實(shí)現(xiàn)過(guò)程
要實(shí)現(xiàn)這樣一個(gè)需求寄送包裹小于5kg,每公斤0.5元,大于等于5kg,超出5公斤部分,按照每公斤0.8元計(jì)算,輸入重量,輸出應(yīng)付金額,下面小編給大家分享實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧2022-02-02
caffe的python接口生成配置文件學(xué)習(xí)
這篇文章主要介紹了caffe的python接口生成配置文件學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
python 計(jì)算方位角實(shí)例(根據(jù)兩點(diǎn)的坐標(biāo)計(jì)算)
今天小編就為大家分享一篇python 計(jì)算方位角實(shí)例(根據(jù)兩點(diǎn)的坐標(biāo)計(jì)算),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
Python 中的字符串基礎(chǔ)與應(yīng)用小結(jié)
在Python中,字符串可以用單引號(hào)或雙引號(hào)括起來(lái),'hello' 與 "hello" 是相同的,這篇文章主要介紹了Python 中的字符串基礎(chǔ)與應(yīng)用,需要的朋友可以參考下2023-09-09
詳解Python如何檢查一個(gè)數(shù)字是否是三態(tài)數(shù)
在數(shù)學(xué)中,三態(tài)數(shù)(Triangular?Number)是一種特殊的數(shù)列,它是由自然數(shù)按照一定規(guī)律排列而成的,本文主要介紹了如何使用Python檢查判斷一個(gè)數(shù)字是否是三態(tài)數(shù),需要的可以參考下2024-03-03
解決Jupyter Notebook “signal only works&nb
這篇文章主要介紹了解決Jupyter Notebook “signal only works in main thread“問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python批量獲取并保存手機(jī)號(hào)歸屬地和運(yùn)營(yíng)商的示例
這篇文章主要介紹了Python批量獲取并保存手機(jī)號(hào)的歸屬地和運(yùn)營(yíng)商的示例,幫助大家更好的利用python處理數(shù)據(jù),感興趣的朋友可以了解下2020-10-10

