def test_layers():
layers = [[1,2],[11,12,13],[-1,-2]]
shape = [len(layer) for layer in layers]
offsets = [0] * len(shape)
has_next = True
while has_next:
record = [layers[i][off] for i,off in enumerate(offsets)]
print(record)
for i in range(len(shape) - 1, -1, -1):
if offsets[i] + 1 >= shape[i]:
offsets[i] = 0 # 重置并进位
if i == 0:
has_next = False # 全部占满,退出
else:
offsets[i] += 1
break
print('complete')
b1=[[2]*3]*2
b2=[[2,2,2],[2,2,2]]
这个两个定义的变量其实时不一样的
b2一个list,包含两个list元素
b1是1个list元素的两个浅拷贝,可以理解成两个指向[2]*3的指针。
出现这种问题,实际上理解的误区,[2]*3 = [2,2,2] 就想当然的把[[2]*3]*2= [2,2,2]*2 = [[2,2,2] [2,2,2]]
其实[[]]是一个list的浅拷贝(或者理解成指向list指针)
更详细的可以看下python的文档,里面有说明。