weixin_43174556 2019-09-13 18:05 采纳率: 0%
浏览 511

Python for循环却别怎么这么大?

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}]

  • 写回答

1条回答 默认 最新

  • JonathanYan 2019-09-13 22:35
    关注

    麻烦调下格式好吗,知道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次)

    评论

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python