列表初始化的Python列表

flm*_*620 1 python list

我知道

[[]] * 10
Run Code Online (Sandbox Code Playgroud)

将给出10个相同的空引用,和

[[] for i in range(10)]
Run Code Online (Sandbox Code Playgroud)

将给出10个空列表.但在这个例子中:

def get_list(thing):
  return [thing for i in range(10)]
a = get_list([])
a[0].append(1)
print(a)
Run Code Online (Sandbox Code Playgroud)

为什么结果又来了

[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
Run Code Online (Sandbox Code Playgroud)

编辑:

与问题列表中的更改反映在子列表中的意外不同,我理解Python不会复制[x]*10.

但为什么[]特别[[] for i in range(10)]?我认为这是不一致的.而不是创建一个空列表[]然后传递给[ ___ for i in range(10)]Python,字面意思是"[]"并为每个执行"[]" i.

Bha*_*rel 5

那是因为thing是同一个清单.

[[] for i in range(10)]一个新的列表每当产生.

[thing for i in range(10)]它总是列出名单thing.