Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么它们能在python2.7中得到相同的结果?关于列表中每个元素的分配_Python_List - Fatal编程技术网

为什么它们能在python2.7中得到相同的结果?关于列表中每个元素的分配

为什么它们能在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] 方法二:我可

我为范围(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]
方法二:我可以随心所欲地工作

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

这不是很清楚。“每个元素的赋值”是什么意思?这不是很清楚。“每个元素的赋值”是什么意思?谢谢你的帮助,我照你说的做,结果也和你一样,但为什么是这样?第一个循环得到的元素只能读取吗?谢谢你的帮助,我照你说的做,结果也和你一样,但是为什么会这样呢?第一个循环得到的元素只能被读取吗?非常感谢!我想我知道答案了!谢谢!我想我知道答案了!