>>> a = []
>>> b = [a*2]
>>> b
[[]]
>>> b = [copy.deepcopy(a)*2]
>>> b
[[]]
我正在尝试将b
创建为包含两个a
副本的列表。为什么b
不是[[],[]]
?我怎样才能使b
为[[],[]]
?
答案 0 :(得分:5)
如果您要在其中创建带有a
的b 两次:
a = []
b = [a] * 2
但要注意,列表是mutable!
b[1].append('foo')
b
[['foo'], ['foo']]
如果您想使用a
的两个副本创建b:
b = [a[:] for i in range(2)]
为了更好地控制副本的性质(vs绑定),请阅读python copy模块文档。
答案 1 :(得分:0)
您可以尝试此b = [a for i in xrange(2)]
答案 2 :(得分:0)
乘以列表* 2,与将其添加到自身相同,正如预期的那样。但如果你这样做:
a = [1]
b = [2]
a + b
[1, 2]
请注意,您没有获得[[1], [2]]
- 这不是将列表添加到一起的意思。添加两个列表会为您提供一个列表,其中包含两个列表中的所有元素。
因此,在这些行中,[] * 2
会生成一个类似[]
的列表,因为如果您执行[] + []
,那么这也是您所得到的 - 包含其中两个列表中所有元素的列表,因为两个输入列表都是空的,所以也是空的。然后,您将其放在另一个列表中,最后得到[[]]
。
其他答案已经涵盖了其他方法,因此我不会重复这些。