Python 的for循环,一个放在循环内,一个放在循环外,本想改变列表第一个元素(字典)的键值,为什么所有列表元素的的键值都改变了,为什么区别这么大?
1.
aliens=[]
for alien_number in range(5):
new_alien = {'color': 'green',
'point': 5,
}
aliens.append(new_alien)
print(aliens)
aliens[0]['color']=‘red’
print(aliens)
运行结果:
[{'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}]
[{'color': 'red', 'point': 5}, {'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}]
2.
aliens=[]
new_alien = {'color': 'green',
'point': 5,
}
for alien_number in range(5):
aliens.append(new_alien)
print(aliens)
aliens[0]['color']='red'
print(aliens)
运行结果:
[{'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}, {'color': 'green', 'point': 5}]
[{'color': 'red', 'point': 5}, {'color': 'red', 'point': 5}, {'color': 'red', 'point': 5}, {'color': 'red', 'point': 5}, {'color': 'red', 'point': 5}]
麻烦调下格式好吗,知道python最重要的是对齐吗,不对齐谁都看不懂你写的什么
python赋值传的是引用不是值,就像c++函数传值里的func(type &a)和func(type a)的区别,前者会以类似指针传递的方式传递引用,后者会拷贝一个对象。
因此第一种方式下每次append的都是在for循环中新生成的字典对象,aliens的赋值结果为alines={a,b,c,d,e}
而第二种方式下for循环只是吧同意个引用在aliens中添加了5次,赋值结果为alines={a,a,a,a,a},所以赋值第一个变量等于改变了a也就等效于改变了5个变量(实际上是只改变了一个变量然后打印了5次)