当我将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'}
答案 0 :(得分:1)
第一种情况:您每次都在循环中创建一个新对象。 aliens
的每个成员都是不同的。
第二种情况:同一对象被插入列表30次。它是对列表aliens
中相同对象的30个引用。如果使用1个参考更改对象,则所有其他参考都会反映该更改。