标题:新人求教:外星人颜色变动求解
只看楼主
python_dyp
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-10-27
结帖率:100%
已结贴  问题点数:20 回复次数:4 
新人求教:外星人颜色变动求解
aliens = []
#new_alien = {'color':'green','speed':'slow','points':5}
for alien_number in range(0,30):
    new_alien = {'color':'green','speed':'slow','points':5}
    aliens.append(new_alien)
for alien in aliens[:3]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['speed'] = 'medium'
        alien['points'] = 10
for alien in aliens[:5]:
    print(alien)
字典定义位置第二行与第四行代码位置不同对结果影响截然不同,表示不明白为何会这样,希望大佬指导,感谢感谢~~~

[此贴子已经被作者于2020-10-27 08:29编辑过]

搜索更多相关主题的帖子: 不同 color 位置 for 颜色 
2020-10-27 08:28
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
回复 楼主 python_dyp
循环里和循环外  怎么能一样???

DO IT YOURSELF !
2020-10-27 12:02
python_dyp
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-10-27
得分:0 
以下是引用wp231957在2020-10-27 12:02:38的发言:

循环里和循环外  怎么能一样???

第一个for循环输出结果和循环里外都不影响啊,之后的循环液没有调用字典的地方吧?表示刚学习,能详解一下么?感谢大佬了,谢谢了!!!
2020-10-27 12:23
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:20 
以下是引用python_dyp在2020-10-27 12:23:55的发言:


第一个for循环输出结果和循环里外都不影响啊,之后的循环液没有调用字典的地方吧?表示刚学习,能详解一下么?感谢大佬了,谢谢了!!!


这是个老问题了。就是要明白对于可变的变量被赋给别的变量,赋给的是这个变量的引用。对于第一个new_alien的定义。你添加到aliens的都是一个对new_alien的引用,你修改一个new_alien,会改动aliens里其他的new_alien
第二个new_alien的定义,每次都是重新定义一个new_alien,他们是互不影响的。所以你改动for alien in aliens[:3]:里的new_alien,不会影响其他的。具体可以通过id(new_alien) 来查看
for alien_number in range(0,7):
    #new_alien = {'color':'green','speed':'slow','points':5}
    print(id(new_alien))
    aliens.append(new_alien)
2020-10-27 15:01
python_dyp
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-10-27
得分:0 
以下是引用fall_bernana在2020-10-27 15:01:26的发言:



这是个老问题了。就是要明白对于可变的变量被赋给别的变量,赋给的是这个变量的引用。对于第一个new_alien的定义。你添加到aliens的都是一个对new_alien的引用,你修改一个new_alien,会改动aliens里其他的new_alien
第二个new_alien的定义,每次都是重新定义一个new_alien,他们是互不影响的。所以你改动for alien in aliens[:3]:里的new_alien,不会影响其他的。具体可以通过id(new_alien) 来查看
for alien_number in range(0,7):
    #new_alien = {'color':'green','speed':'slow','points':5}
    print(id(new_alien))
    aliens.append(new_alien)

虽然自己还没学习到id(),但是已经明白了,感谢大佬,受教了!!!
2020-10-27 15:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503648-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.324238 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved