日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:警惕python中的*重復符(運算符)

在python中有個特殊的符號“*”,可以用做數(shù)值運算的乘法算子,也是用作對象的重復算子,但在作為重復算子使用時一定要注意

注意的是:*重復出來的各對象具有同一個id,也就是指向在內存中同一塊地址,在對各個對象進行操作是一定要注意。

舉例來說:

>>> 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

那我們想要的結果應該是:

[[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)說過了,*重復出來的各對象具有同一個id,也就是指向在內存中同一塊地址,在對各個對象進行操作是一定要注意。

我們再初始化的時候用了重復算子"*",這個操作符在對對象進行重復操作時,會將重復的所有對象都指向同一塊內存地址,所有當你改變其中的一個值時,

其他的值自然也會更新,用python的話進行解釋就是下面的命令及輸出:

>>> id(alist[0])
18858192
>>> id(alist[1])
18858192
>>> id(alist[2])
18858192
>>> id(alist[3])
18858192
>>>

看到了吧,id都是一樣滴,也就是說這4個list是同一個“l(fā)ist”。

既然這樣那我們想要模擬一個矩陣怎么辦呢,除了有專門的numpy包之外,你當然可以給上層list逐個的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]]

這樣,我們再試試上面的賦值操作:

>>> blist[0][0]=1
>>> blist[[1, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]>>>



本文題目:創(chuàng)新互聯(lián)Python教程:警惕python中的*重復符(運算符)
當前鏈接:http://www.5511xx.com/article/cojesge.html