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