在python中有個特殊的符號「*」,可以用做數值運算的乘法運算元,也是用作物件的重複運算元,但在作為重複運算元使用時一定要注意
舉例來說:
>>
> alist =
[range(3
)]*4
>>
> alist[[
0,1,
2],[
0,1,
2],[
0,1,
2],[
0,1,
2]]
上面初始化乙個二層列表用來模擬矩陣,該矩陣式4x3的,為描述方便,這裡記矩陣為a。
現在我想給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為什麼都跟著變了呢?
原因是這樣的:
我們再初始化的時候用了重複運算元"*",這個操作符在對物件進行重複操作時,會將重複的所有物件都指向同一塊記憶體位址,所有當你改變其中的乙個值時,
其他的值自然也會更新,用python的話進行解釋就是下面的命令及輸出:
>>
>
id(alist[0]
)18858192
>>
>
id(alist[1]
)18858192
>>
>
id(alist[2]
)18858192
>>
>
id(alist[3]
)18858192
>>
>
看到了吧,id都是一樣滴,也就是說這4個list是同乙個「list」。
>>
> blist=
>>
>
for i in
range(4
):[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]]>>
>
python運算子中 Python中的運算子
python中的運算子 數 算符 比較運算子 邏輯運算子 賦值運算子 1.數 算符 乘法 除法 取模 取餘 求餘數 整除 冪運算 1 和數學中的功能一模一樣,沒有區別 print 1 1 print 1 1 print 1 1 注意 的結果是浮點數。print 1 1 1.0 print 5 2 2...
python中的運算子
table 2.1.python 運算子列表 運算子 描述 x y,x y 加 減,號可過載為連線符 x y,x y x y x y 相乘 求平方 相除 求餘,號可過載為重複,號可過載為格式化 比較運算子 自變運算子 x y按位或 x y按位異或 x y按位與 x 按位取反 x x y x 向左或向...
python 中的運算子
python 中的變數可以用字母,數字和下劃線,但不能以數字開頭。互動式python直譯器可以當作非常強的計算器使用比如 先說 2 2 2 2 2 20但是 1 2 乙個整數被另乙個整數除,計算結果小數被截除,只留下整數部分,解決方案有兩個 要麼用實數,要麼讓python改變除法方式。用實數 也稱浮...