列表初始化的Python列表

时间:2017-07-29 08:42:24

标签: python list

我知道

[[]] * 10

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

[[] for i in range(10)]

将提供10个空列表。但在这个例子中:

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

为什么结果再次

[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]

修改

与问题List of lists changes reflected across sublists unexpectedly不同,我理解Python不会在[x]*10中复制。

但为什么[][[] for i in range(10)]中有特殊之处?我认为这是不一致的。而不是创建一个空列表[]然后传递给[ ___ for i in range(10)],Python采取" []"从字面上看并执行" []"对于每个i

2 个答案:

答案 0 :(得分:5)

这是因为thing是相同的列表。

[[] for i in range(10)]中,每次都会生成一个新列表。

[thing for i in range(10)]中,它始终是名为thing的列表。

答案 1 :(得分:0)

我现在明白为什么我错了。我回答我的问题:

我误解了python中的列表理解

[ ___ for i in range(10)]

这不像是将增强功能传递给函数。列表理解每次在循环中按字面意思执行你的表达式。

每次执行[]中的[ [] for i in range(10)]表达式,以便为每个条目获取一个新的空列表。

[thing for i in range(10)]相同。执行表达式thing,结果总是相同的:对一个空列表的引用。