Python列出了困惑

Python列出了困惑,python,list,Python,List,可能重复: 我对Python中的列表列表有点困惑。我有以下两个片段: li1 = [['a'], ['a'], ['a']] print li1 for i in range(0, len(li1)): li1[i] += [i] print li1 li2 = [['a']] * 3 print li2 for i in range(0, len(li2)): li2[i] += [i] print li2 创建后,li1和li2是相同的,但当我添加元素时,它们的行为不

可能重复:

我对Python中的列表列表有点困惑。我有以下两个片段:

li1 = [['a'], ['a'], ['a']]
print li1
for i in range(0, len(li1)):
    li1[i] += [i]
print li1

li2 = [['a']] * 3
print li2
for i in range(0, len(li2)):
    li2[i] += [i]
print li2
创建后,li1和li2是相同的,但当我添加元素时,它们的行为不同:

[['a'], ['a'], ['a']]
[['a', 0], ['a', 1], ['a', 2]]
[['a'], ['a'], ['a']]
[['a', 0, 1, 2], ['a', 0, 1, 2], ['a', 0, 1, 2]]

有人能解释一下诀窍在哪里吗?

li2=[[a']]*3
中,您创建了一个包含三个列表元素的列表,但这些列表实际上是同一个对象。这意味着:当您修改
li2[0]
时,您还可以修改
li2[1]
li2[2]

下一行实际上创建了一个包含三个不同列表对象的列表:

li1 = [['a'], ['a'], ['a']]

在这种情况下,当您修改
li1[0]
时,您只修改该列表。其他列表不受影响。这解释了为什么您在
li1
li2
中得到不同的列表,检查每个元素的
id()
值,这清楚地表明了它们行为的原因

>>> li1 = [['a'], ['a'], ['a']]
>>> for x in li1:                  #different id()
    id(x)


145497484
145514156
145511500
id()的值相同。


我试着寻找类似的问题,但实际上可以表述这个问题,所以被问到。你没有看到这个问题实际上与你要问的问题有完全相同的标题吗?
>>> li1=['a']*3
>>> for x in li1:
    print id(x)


3078093024
3078093024
3078093024