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 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了