找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2885|回复: 2

[求助] 关于字典列表嵌套的问题求助

2

主题

4

帖子

4

积分

贫民

积分
4
lzc19862004 发表于 2017-2-26 23:21:32 | 显示全部楼层 |阅读模式
有以下一段代码:
aliens = []
for alien_number  in  range(30):
        new_alien = {'color':'green','points':5,'speed':'slow'}
        aliens.append(new_alien)
for alien  in  aliens[0:5]:
        if alien['color'] == 'green':
                alien['color'] = 'yellow'
                alien['points'] = 10
                alien['speed'] = 'medium'
for alien in aliens[0:10]:
        print(alien)

想问的是:为什么new_alien这个变量不能在for循环之前进赋值?比如这样写:


aliens = []
new_alien = {'color':'green','points':5,'speed':'slow'}
for alien_number in range(30):
        aliens.append(new_alien)
for alien in aliens[0:5]:
        if alien['color'] == 'green':
                alien['color'] = 'yellow'
                alien['points'] = 10
                alien['speed'] = 'medium'
for alien in aliens[0:10]:
        print(alien)

我发现如果这样写的话,在第二个for循环执行之后,new_alien的值已经变了。请教一下为什么会这样?最好能详细点解释一下。万分感谢!!


回复

使用道具 举报

2

主题

6

帖子

6

积分

贫民

积分
6
32269100 发表于 2017-2-27 14:19:01 | 显示全部楼层
这是因为在循环内,new_alien的字典地址会不断改变,表面看上去aliens里面有30个同样的字典new_alien,但实际上,他们地址不一样。

第二段代码,把字典外置,列表里面有30个字典,但是这30个字典的指向地址都是同一处,改动任何一个,全部字典都被改。
回复 支持 反对

使用道具 举报

2

主题

4

帖子

4

积分

贫民

积分
4
lzc19862004  楼主| 发表于 2017-2-27 15:22:12 | 显示全部楼层
32269100 发表于 2017-2-27 14:19
这是因为在循环内,new_alien的字典地址会不断改变,表面看上去aliens里面有30个同样的字典new_alien,但实 ...

卡在这个问题上很久了,刚顺着回复的内容想了一下,好像是这个道理,我再好好琢磨一下。非常感谢您的回答。
回复 支持 反对

使用道具 举报

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

本版积分规则

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