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邦