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]。
为什么?
答案 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