我知道
[[]] * 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)] 中是特殊的?我认为这是不一致的。 Python 不是创建一个空列表 [] 然后传递给 [ ___ for i in range(10)],而是按字面意思理解“[]”并执行“[]”每 i.
请您参考如下方法:
那是因为 thing 是同一个列表。
在 [[] for i in range(10)] 中,每次都会生成一个新列表。
在 [thing for i in range(10)] 中,它始终是名为 thing 的列表。
