python中[[]] * 2做了什么?

时间:2010-07-02 01:16:29

标签: python

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 个答案:

答案 0 :(得分:16)

A = [[]]*2创建一个包含2个相同元素的列表:[[],[]]。 元素是完全相同的列表。 所以

A[0].append("a")
A[1].append("b")

"a""b"添加到同一列表中。

B = [[], []]创建一个包含2个不同元素的列表。

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