为什么它们能在python2.7中得到相同的结果?关于列表中每个元素的分配
我为范围(10)内的I创建了一个类似于为什么它们能在python2.7中得到相同的结果?关于列表中每个元素的分配,python,list,Python,List,我为范围(10)内的I创建了一个类似于aa=[]的列表,我希望为每个元素赋值 我用了两种方法来做这件事,但一种方法可行,另一种方法不行,我不知道为什么 请告诉我!谢谢 aa=[ [] for i in range(10)] 方法一:不能像我想的那样工作 for a in aa:a=[2] it get the result [[], [], [], [], [], [], [], [], [], []] for i in range(len(aa)): aa[i]=[2] 方法二:我可
aa=[]的列表,我希望为每个元素赋值
我用了两种方法来做这件事,但一种方法可行,另一种方法不行,我不知道为什么
请告诉我!谢谢
aa=[ [] for i in range(10)]
方法一:不能像我想的那样工作
for a in aa:a=[2] it get the result [[], [], [], [], [], [], [], [], [], []]
for i in range(len(aa)): aa[i]=[2]
方法二:我可以随心所欲地工作
for a in aa:a=[2] it get the result [[], [], [], [], [], [], [], [], [], []]
for i in range(len(aa)): aa[i]=[2]
它得到了结果
[[2], [2], [2], [2], [2], [2], [2], [2], [2], [2]]
我做了另一个测试:
for index,a in enumerate(aa): print aa[index] is `a`
结果都是真的
我认为a
和aa[I]
是一样的,但我找不到答案。在这里:
for a in aa:
a = [2]
您没有分配给实际的aa
列表,只是分配给一个名为a
的局部变量,该变量是为在列表上迭代而创建的;变量a
以前指向aa
内部的一个位置,但现在您将[2]
分配给它,更改变量的值,但根本没有修改aa
。这就是它不起作用的原因。另一方面,在这里:
for i in range(len(aa)):
aa[i] = [2]
您实际上是在修改aa
中的一个位置,因此值[2]
被分配到aa[i]
位置。在这里:
for a in aa:
a = [2]
您没有分配给实际的aa
列表,只是分配给一个名为a
的局部变量,该变量是为在列表上迭代而创建的;变量a
以前指向aa
内部的一个位置,但现在您将[2]
分配给它,更改变量的值,但根本没有修改aa
。这就是它不起作用的原因。另一方面,在这里:
for i in range(len(aa)):
aa[i] = [2]
您实际上是在修改aa
中的一个位置,因此值[2]
被分配到aa[i]
位置。第一个循环依次将a
分配给aa
的每个元素,但=
重新分配a
,这根本不会影响aa
第二个循环直接修改aa
,正如您所期望的那样
要演示第一个效果,请稍微更改测试:
for index,a in enumerate(aa):
print aa[index] is a # should print 'True'
a = [2]
print aa[index] is a # should print 'False' because you've reassigned a
第一个循环依次将a
分配给aa
的每个元素,但是=
重新分配a
,这根本不会影响aa
第二个循环直接修改aa
,正如您所期望的那样
要演示第一个效果,请稍微更改测试:
for index,a in enumerate(aa):
print aa[index] is a # should print 'True'
a = [2]
print aa[index] is a # should print 'False' because you've reassigned a
这不是很清楚。“每个元素的赋值”是什么意思?这不是很清楚。“每个元素的赋值”是什么意思?谢谢你的帮助,我照你说的做,结果也和你一样,但为什么是这样?第一个循环得到的元素只能读取吗?谢谢你的帮助,我照你说的做,结果也和你一样,但是为什么会这样呢?第一个循环得到的元素只能被读取吗?非常感谢!我想我知道答案了!谢谢!我想我知道答案了!