我來解釋壹下我的理解。這取決於內存分配。
,?這三個零是分配的不同內存地址,並且
妳把裏面的三個零理解為:?張三,李四,王五,這是三個人。妳改了其中壹個,不會影響另外兩個。但是
[[0]]*3?結果[[0],[0],[0]]可以理解為:張三,小張,阿三,其中小張和阿三是張三的兩個昵稱。這三個[0]其實是1人。所以妳改變壹個[0],另外兩個[0]肯定也會改變。
而如果直接寫[[0],[0],[0],可以理解為這三個[0]是三個不同的人。
至於為什麽[[0]]*3得到[[0],[0],[0]]?而且直接定義[[0],[0],[0]]看起來都壹樣。但是當妳修改壹個元素的值時,妳會得到不同的結果。這就是python的實現機制。這個不用太擔心,因為python就是這麽設計的。妳只需要明白這個邏輯,用的時候就用。
寫在最後:這只是我自己的理解。沒有理論依據,希望不會誤導題主。
希望能對題主有所幫助。歡迎提問。
修改後的答案:
使用“threeZeros=[0] * 3”的語法,語句執行後,在初始狀態下,內存中只會創建壹個對象,然後三個元素的地址都會指向該對象,也就是此時內存中只會創建壹個對象,然後三個零[0],三個零[1],三個零[2]都指向這個地址,也就是ID(三個零[0]) = = ID(三個零[0]) = = ID(三個零[0])= = ID(三個零
當我們單獨給初始化的三個零中的元素賦值時,將在內存中創建壹個新的空間來創建壹個新的對象。因此,當我們完成執行時,
三個零[0] = 3
妳會發現id(threeZeros[0])的地址變了,但是id(threeZeros[1])和id(threeZeros[2])沒有變,因為妳只是改變了threeZeros[0]元素的方向。