在Python中 [[]]*2 的作用是什么?

9 投票
1 回答
1106 浏览
提问于 2025-04-16 00:42
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

撰写回答