浮夸~boy
2021-04-17 23:15
采纳率: 100%
浏览 51

为什么改变for循环中接受数据的变量的值可以影响到被遍历列表的值

alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points':15}
# 创建一个空列表用于存储外星人
aliens = []

# 创建30个绿色的外星人
for alien in range(30):
    new_aliens = {'color': 'green', 'points': 5, 'speed': 'slow'}
    aliens.append(new_aliens)

# 改变前三个外星人的数据 
for alien in aliens[:3]:
    if alien['green'] == 'green':   (问题所在处:为什么改变alien的值会改变aliens列表的值)
        alien['color'] = 'yellow'
        alien['points'] = 10
        alien['speed'] = 'slow'


# 打印前5个星人
for alien in aliens[:5]:
    print(alien)

# 显示创建了多少个外星人
print(f"外星人的个数:{len(aliens)}")
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • 已采纳

    正常就应该是这样的,你的循环本来就是在改变aliens列表的值呀,alien是列表的其中一个元素。

    已采纳该答案
    打赏 评论
  • 浴火_凤凰 2021-04-18 01:56
    aliens[:3]是引用类型 和你的aliens引用的是同一个aliens列表 所以你修改前三个会影响到原来的列表

    如果不想改变原来的值,可以使用JSON模块复制出新对象 然后操作新对象

    可以参考如下代码块:

    import json
    aliens = []
    # 创建5个绿色的外星人
    for i in range(5):
        new_aliens = {'color': 'green', 'points': 5, 'speed': 'slow'}
        aliens.append(new_aliens)
    temp_list=json.loads(json.dumps(aliens[:3]))
    for alien in temp_list:
        if alien['color'] == 'green':
            alien['color'] = 'yellow'
            alien['points'] = 10
            alien['speed'] = 'slow'
    for item in temp_list:
        print(item)
    for item in aliens:
        print(item)
    1 打赏 评论
  • CSDN专家-HGJ 2021-04-18 01:24

    这句语法错误,if alien['green'] == 'green',因为‘green’不是alien键,会出现健值错误,程序终止运行。改为if alien['color'] == 'green'后,通过循环遍历列表中字典,对字典重新赋值,原列表中字典作相应的改变。

    打赏 评论
  • 请采纳,谢谢!

    打赏 评论
  • 有问必答小助手 2021-04-19 11:46

    您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    打赏 评论
  • 有问必答小助手 2021-04-20 13:31

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    打赏 评论

相关推荐 更多相似问题