当我在for循环内或外更改字典的位置时,为什么输出差异很大?

时间:2019-06-13 15:51:21

标签: python python-3.x dictionary

当我将new_alien字典的位置更改为初始for循环内时,输出将按预期方式工作。我的主要问题是,当我将new_alien的位置更改为循环之外时,最终输出将所有列表更改为第二个for循环中的一个。我是字典的新手,感谢您的帮助!

#example code from Python Crash Course by Eric Matthes that i used as practice
aliens = []

#the problematic dictionary location
#new_alien = {'color' : 'green', 'points' : 5, 'speed' : 'slow'}

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

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

for test in aliens[:5]:
    print(test)

预期结果如下:

{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}

但是当我将new_alien词典更改为第一个for循环之前时,结果如下:

{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}

1 个答案:

答案 0 :(得分:1)

第一种情况:您每次都在循环中创建一个新对象。 aliens的每个成员都是不同的。

第二种情况:同一对象被插入列表30次。它是对列表aliens中相同对象的30个引用。如果使用1个参考更改对象,则所有其他参考都会反映该更改。