找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2073|回复: 1

[求助] 急求:仅仅挪一行代码,为啥结果不一样啊?

1

主题

1

帖子

1

积分

贫民

积分
1
davyhunter 发表于 2018-10-19 21:32:17 | 显示全部楼层 |阅读模式
第一段代码:

aliens=[]
for alien_number in range(0,30):
        new_alien={'color':'green','point':5,'speed':'slow'}
        aliens.append(new_alien)

for alien in aliens[0:3]:
        if alien['color']=='green':
                alien['color']='yellow'
                alien['speed']='medium'
                alien['point']=10

for alien in aliens[0:5]:
        print(alien)


第二段代码:
new_alien={'color':'green','point':5,'speed':'slow'}
aliens=[]
for alien_number in range(0,30):
       
        aliens.append(new_alien)

for alien in aliens[0:3]:
        if alien['color']=='green':
                alien['color']='yellow'
                alien['speed']='medium'
                alien['point']=10

for alien in aliens[0:5]:
        print(alien)


哪位大神告诉我,第二段代码仅仅把(new_alien={'color':'green','point':5,'speed':'slow'})挪到了for 语句外面,为啥运行结果不一样啊?

回复

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2018-10-20 10:56:30 | 显示全部楼层
第一段你在for循环内每次都给new_alien赋值,每次new_alien会指向不同的内存地址,也就是加入到列表aliens中的是不同的变量,改变aliens中任意元素不会影响其它的。
第二段你的new_alien放到for循环的前面,只赋值了一次,每次加入列表aliens的都是同一变量,指向同一内存地址,修改列表的任意元素,因为所有的元素都是指向同一内存地址的,所以其它元素也会跟着变化
回复 支持 反对

使用道具 举报

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

本版积分规则

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