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 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛