警惕python中的 重複符(運算子)

2021-10-06 00:15:27 字數 1638 閱讀 4986

在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改變除法方式。用實數 也稱浮...