2017-11-30 10:22:08 1393瀏覽
今天扣丁學(xué)堂小編給大家詳細(xì)介紹一下關(guān)于深入理解Python視頻教程中的*重復(fù)運算符,在python中有個特殊的符號“*”,可以用做數(shù)值運算的乘法算子,也是用作對象的重復(fù)算子,但在作為重復(fù)算子使用時一定要注意的是:*重復(fù)出來的各對象具有同一個id,也就是指向在內(nèi)存中同一塊地址,在對各個對象進(jìn)行操作是一定要注意。
舉例來說:
>>> alist = [range(3)]*4
>>> alist
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
上面初始化一個二層列表用來模擬矩陣,該矩陣式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為什么都跟著變了呢?
原因是這樣的:開始的時候已經(jīng)說過,*重復(fù)出來的各對象具有同一個id,也就是指向在內(nèi)存中同一塊地址,在對各個對象進(jìn)行操作是一定要注意。
再初始化的時候用了重復(fù)算子"*",這個操作符在對對象進(jìn)行重復(fù)操作時,會將重復(fù)的所有對象都指向同一塊內(nèi)存地址,所有當(dāng)你改變其中的一個值時,其他的值自然也會更新,用python的話進(jìn)行解釋就是下面的命令及輸出:
>>> id(alist[0])
18858192
>>> id(alist[1])
18858192
>>> id(alist[2])
18858192
>>> id(alist[3])
18858192
>>>
注意:id都是一樣滴,也就是說這4個list是同一個“l(fā)ist”。
既然這樣那想要模擬一個矩陣怎么辦呢,除了有專門的numpy包之外,當(dāng)然可以給上層list逐個的append新的list,例如:
>>> blist=[]
>>> for i in range(4):
blist.append([j for j in range( 3)])
>>> blist
這樣再試試上面的賦值操作:
>>> blist[0][0]=1
以上就是本文關(guān)于深入理解Python中的*重復(fù)運算符的全部內(nèi)容,希望對大家有所幫助。最后想要學(xué)習(xí)Python開發(fā)技術(shù)的朋友選擇扣丁學(xué)堂絕對是你最正確的選擇,扣丁學(xué)堂不僅有名師和與時俱進(jìn)的課程體系,還有大量的Python培訓(xùn)視頻教程供學(xué)員觀看學(xué)習(xí),想要快速學(xué)好Python開發(fā)工程師技能高薪就業(yè)的小伙伴抓緊時間行動吧。扣丁學(xué)堂python技術(shù)交流群279521237。
【關(guān)注微信公眾號免費領(lǐng)取丁豆獲取更多的學(xué)習(xí)資料】
查看更多關(guān)于“Python開發(fā)資訊”的相關(guān)文章>>