在Python中 [[]]*2 的作用是什么?
A = [[]]*2
A[0].append("a")
A[1].append("b")
B = [[], []]
B[0].append("a")
B[1].append("b")
print "A: "+ str(A)
print "B: "+ str(B)
输出结果:
A: [['a', 'b'], ['a', 'b']]
B: [['a'], ['b']]
我们本来以为A列表和B列表应该是一样的,但实际上并不是这样,两个添加操作都是对A[0]和A[1]进行的。
这是为什么呢?
1 个回答
17
A = [[]]*2
这行代码创建了一个包含两个相同元素的列表,结果是 [[],[]]
。这两个元素其实是完全一样的列表。
所以
A[0].append("a")
A[1].append("b")
这会把 "a"
和 "b"
都添加到同一个列表里。
B = [[], []]
这行代码创建了一个包含两个不同元素的列表。
In [220]: A=[[]]*2
In [221]: A
Out[221]: [[], []]
这说明 A
的两个元素是相同的:
In [223]: id(A[0])==id(A[1])
Out[223]: True
In [224]: B=[[],[]]
而这说明 B
的两个元素是不同的对象。
In [225]: id(B[0])==id(B[1])
Out[225]: False