我知道
[[]] * 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
。
答案 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
,结果总是相同的:对一个空列表的引用。