a = [[[]]*3 for _ in range(3)] print(a) #[[[], [], []], [[], [], []], [[], [], []]] a[0][0].append(1) print(a) #[[[1], [1], [1]], [[], [], []], [[], [], []]] [[]]*3裡面的三個[]會指向同一個因為list is mutable P = [[()]*3]*3 P[0][0] = 1 print(P) #[[1, (), ()], [1, (), ()], [1, (), ()]] 這邊一樣 內層的[()]*3是個list 所以外層*3會讓裡面的三個[(),(),()]指向同一個 P = [[()]*3 for _ in range(3)] print(P) #[[1, (), ()], [(), (), ()], [(), (), ()]] 因為()immutable [(),(),()]裡面的三個()指向不同記憶體 然後再用list conprehension做三次 所以九個()都指向不同的地方 希望我沒理解錯== 看來我都在亂用 ※ 引述《DJYOSHITAKA (franchouchouISBEST)》之銘言: : 我想init一個mxn的2D list,然後每個element又是一個空的list : 我這樣寫(假設m=n=3) : a = [[[]]*3 for _ in range(3)] : print(a) : a[0][0].append(1) : print(a) : 然後 : [[[], [], []], [[], [], []], [[], [], []]] : [[[1], [1], [1]], [[], [], []], [[], [], []]] : ??? : 我想要的是 : [[[1], [], []], [[], [], []], [[], [], []]] : 我哪裡寫錯了嗎== : 聖我不會py了 加入不了py邦 -- ※ 發信站: 批踢踢實業坊(ptt-website.tw), 來自: 114.137.230.241 (臺灣) ※ 文章網址: https://ptt-website.tw/Marginalman/M.1715874330.A.14F
XROCK: 這上色很不友善丫== 05/16 23:46
Smallsh: 應該是 你()那個位置要new一個物件 05/16 23:54
Smallsh: 詳細過程可能要看bytecode 05/16 23:54
Smallsh: 窩也不是很懂 05/16 23:54