我知道
[[]] * 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.
那是因为thing是同一个清单.
在[[] for i in range(10)]一个新的列表每当产生.
在[thing for i in range(10)]它总是列出名单thing.