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邦