找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 6371|回复: 10

[求助] 新手,用for循环对列表赋值时,所有值都以最后的i值计算

1

主题

4

帖子

4

积分

贫民

积分
4
尘墟0 发表于 2017-6-5 14:38:37 | 显示全部楼层 |阅读模式
本帖最后由 尘墟0 于 2017-6-5 20:37 编辑

有两个例子,第一个如下,
  1. a=[0]*5
  2. for i in range(5):
  3.     a[i]=i+3
复制代码

此时,a=[3,4,5,6,7]
第二个如下:
  1. a=[[0,0]]*5
  2. for i in range(5):
  3.     a[i][0]=i+3
复制代码

这个时候,a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]

为什么会出现这种情况呢,我的第二种写法有什么不对吗?
新手求大神指教!


回复

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2017-6-23 09:48:12 | 显示全部楼层
a=[[0,0]]*5这个写法,好像五个子列表都是指向同一个内存地址的,改变其中一个,其他的子列表都会跟着改变,具体知识可以查一下深浅拷贝
回复 支持 1 反对 0

使用道具 举报

0

主题

12

帖子

12

积分

贫民

积分
12
QQ
pl2379965 发表于 2017-6-5 15:58:15 | 显示全部楼层
第一个例子,你确定不是a[i] = i + 3
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
xixihaha 发表于 2017-6-5 18:00:26 | 显示全部楼层
我试的两种结果一样 。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
尘墟0  楼主| 发表于 2017-6-5 20:35:03 | 显示全部楼层
pl2379965 发表于 2017-6-5 15:58
第一个例子,你确定不是a = i + 3

对,我写错了
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
尘墟0  楼主| 发表于 2017-6-5 20:38:37 | 显示全部楼层
xixihaha 发表于 2017-6-5 18:00
我试的两种结果一样 。

不好意思,之前编辑的有点错误,能麻烦您再试试吗
回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
尘墟0  楼主| 发表于 2017-6-9 15:26:29 | 显示全部楼层
有大神能帮忙解答一下吗
回复 支持 反对

使用道具 举报

0

主题

25

帖子

25

积分

贫民

积分
25
zps26 发表于 2017-6-23 09:31:23 | 显示全部楼层
  1. a=[[0,0],[0,0],[0,0],[0,0],[0,0]]

  2. for i in range(5):
  3.     a[i][0]=i+3
  4. print(a)
复制代码


----------------------------------
[[3, 0], [4, 0], [5, 0], [6, 0], [7, 0]]
回复 支持 反对

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2017-6-23 09:52:05 | 显示全部楼层
测试


AE)4}E2PFD0MO6VLW054~GY.png
回复

使用道具 举报

0

主题

5

帖子

5

积分

贫民

积分
5
nageyes 发表于 2017-7-15 11:04:47 | 显示全部楼层
a=[[0,0],[0,0],[0,0],[0,0],[0,0]]
>>> for i in range(0,5):
        a[i][1]=i+3
>>> a
[[3, 3], [4, 4], [5, 5], [6, 6], [7, 7]]
为什么第一位也变了  我这样不是改的是第二个数吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表