作者DJYOSHITAKA (franchouchouISBEST)
標題Re: [閒聊] python大師請進
時間2024-05-16 23:45:26
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