注册 登录
编程论坛 Python论坛

刚开始学python,自己啃书到嵌套遇到问题

澄橙子 发布于 2020-04-22 12:17, 1280 次点击
建立一个含有20个外星人的列表
方法一:
aliens = []
alien = {'color':'green','points':'5','speed':'slow',}

for number in range(20):
    aliens.append(alien)

方法二:
aliens = []

for number in range(20):
    alien = {'color':'green','points':'5','speed':'slow',}
    aliens.append(alien)


下面的代码是修改列表aliens[]里前三个外星人数据
for alien_up in aliens[0:3]:
    if alien_up['color'] == 'green':
        alien_up['color'] = 'yellow'
        alien_up['points'] = 10
        alien_up['speed'] = 'medium'

for alien_up in aliens[:]:
    print(alien_up)

为什么用方法一创建的列表经过下面的修改外星人代码后,列表里所有字典的值都变了,而方法二创建的列表只有前三个字典值改变?
方法一与方法二有啥区别?
1 回复
#2
fall_bernana2020-04-22 14:03
以下是引用澄橙子在2020-4-22 12:17:08的发言:

建立一个含有20个外星人的列表
方法一:
aliens = []
alien = {'color':'green','points':'5','speed':'slow',}

for number in range(20):
    aliens.append(alien)

方法二:
aliens = []

for number in range(20):
    alien = {'color':'green','points':'5','speed':'slow',}
    aliens.append(alien)


下面的代码是修改列表aliens[]里前三个外星人数据
for alien_up in aliens[0:3]:
    if alien_up['color'] == 'green':
        alien_up['color'] = 'yellow'
        alien_up['points'] = 10
        alien_up['speed'] = 'medium'

for alien_up in aliens[:]:
    print(alien_up)

为什么用方法一创建的列表经过下面的修改外星人代码后,列表里所有字典的值都变了,而方法二创建的列表只有前三个字典值改变?
方法一与方法二有啥区别?

程序代码:

for alien_up in aliens[0:3]:
    print(id(alien_up))#打印alien_up的ID就知道他们是不是同一个东西
    if alien_up['color'] == 'green':
        alien_up['color'] = 'yellow'
        alien_up['points'] = 10
        alien_up['speed'] = 'medium'
1